diff --git a/Cargo.lock b/Cargo.lock index 9f16799d2..753653b1c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -276,6 +276,7 @@ dependencies = [ "azalea-buf", "azalea-language", "azalea-nbt", + "azalea-registry", "log", "once_cell", "serde", diff --git a/README.md b/README.md index f342a794c..bb5b8eb91 100755 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ A collection of Rust crates for making Minecraft bots, clients, and tools.

-*Currently supported Minecraft version: `23w45a`.* +*Currently supported Minecraft version: `1.20.3-pre2`.* > **Warning** > Azalea is still very unfinished, though most crates are in a somewhat useable state diff --git a/azalea-block/src/generated.rs b/azalea-block/src/generated.rs index b0fa7918c..5a700d786 100755 --- a/azalea-block/src/generated.rs +++ b/azalea-block/src/generated.rs @@ -832,6 +832,26 @@ make_block_states! { }, "locked" => bool, "down" => bool, + "age" => PumpkinStemAge { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + }, + "age" => MelonStemAge { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + }, "down" => bool, "north" => bool, "south" => bool, @@ -2261,7 +2281,7 @@ make_block_states! { facing: FacingCubic::North, }, cobweb => BlockBehavior::new().requires_correct_tool_for_drops().strength(4.0, 4.0), {}, - grass => BlockBehavior::new(), {}, + short_grass => BlockBehavior::new(), {}, fern => BlockBehavior::new(), {}, dead_bush => BlockBehavior::new(), {}, seagrass => BlockBehavior::new(), {}, @@ -2816,6 +2836,20 @@ make_block_states! { waterlogged: false, west: false, }, + pumpkin => BlockBehavior::new().strength(1.0, 1.0), {}, + melon => BlockBehavior::new().strength(1.0, 1.0), {}, + attached_pumpkin_stem => BlockBehavior::new(), { + facing: FacingCardinal::North, + }, + attached_melon_stem => BlockBehavior::new(), { + facing: FacingCardinal::North, + }, + pumpkin_stem => BlockBehavior::new(), { + age: PumpkinStemAge::_0, + }, + melon_stem => BlockBehavior::new(), { + age: MelonStemAge::_0, + }, vine => BlockBehavior::new().strength(0.2, 0.2), { east: false, north: false, @@ -5133,14 +5167,30 @@ make_block_states! { powered: false, waterlogged: false, }, - copper_grate => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {}, - exposed_copper_grate => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {}, - weathered_copper_grate => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {}, - oxidized_copper_grate => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {}, - waxed_copper_grate => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {}, - waxed_exposed_copper_grate => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {}, - waxed_weathered_copper_grate => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {}, - waxed_oxidized_copper_grate => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), {}, + copper_grate => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), { + waterlogged: false, + }, + exposed_copper_grate => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), { + waterlogged: false, + }, + weathered_copper_grate => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), { + waterlogged: false, + }, + oxidized_copper_grate => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), { + waterlogged: false, + }, + waxed_copper_grate => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), { + waterlogged: false, + }, + waxed_exposed_copper_grate => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), { + waterlogged: false, + }, + waxed_weathered_copper_grate => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), { + waterlogged: false, + }, + waxed_oxidized_copper_grate => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), { + waterlogged: false, + }, copper_bulb => BlockBehavior::new().requires_correct_tool_for_drops().strength(3.0, 6.0), { lit: false, powered: false, diff --git a/azalea-chat/Cargo.toml b/azalea-chat/Cargo.toml index 9d8115ae6..1f62f7313 100644 --- a/azalea-chat/Cargo.toml +++ b/azalea-chat/Cargo.toml @@ -10,6 +10,8 @@ version = "0.8.0" [features] default = ["azalea-buf"] +azalea-buf = ["dep:azalea-buf"] +numbers = ["dep:azalea-registry"] [dependencies] azalea-buf = { path = "../azalea-buf", features = [ @@ -21,3 +23,4 @@ log = "0.4.20" once_cell = "1.18.0" serde = { version = "^1.0", features = ["derive"] } serde_json = "^1.0.108" +azalea-registry = { path = "../azalea-registry", version = "0.8.0", optional = true } diff --git a/azalea-chat/src/lib.rs b/azalea-chat/src/lib.rs index d6ff72855..9995a183c 100755 --- a/azalea-chat/src/lib.rs +++ b/azalea-chat/src/lib.rs @@ -2,6 +2,8 @@ pub mod base_component; mod component; +#[cfg(feature = "numbers")] +pub mod numbers; pub mod style; pub mod text_component; pub mod translatable_component; diff --git a/azalea-chat/src/numbers.rs b/azalea-chat/src/numbers.rs new file mode 100644 index 000000000..1531ed20a --- /dev/null +++ b/azalea-chat/src/numbers.rs @@ -0,0 +1,52 @@ +//! Contains a few ways to style numbers. At the time of writing, Minecraft only +//! uses this for rendering scoreboard objectives. + +use std::io::{Cursor, Write}; + +#[cfg(feature = "azalea-buf")] +use azalea_buf::{McBufReadable, McBufWritable}; +use azalea_nbt::Nbt; +use azalea_registry::NumberFormatKind; + +use crate::FormattedText; + +#[derive(Clone, Debug)] +pub enum NumberFormat { + Blank, + Styled { style: Nbt }, + Fixed { value: FormattedText }, +} + +#[cfg(feature = "azalea-buf")] +impl McBufReadable for NumberFormat { + fn read_from(buf: &mut Cursor<&[u8]>) -> Result { + let kind = NumberFormatKind::read_from(buf)?; + match kind { + NumberFormatKind::Blank => Ok(NumberFormat::Blank), + NumberFormatKind::Styled => Ok(NumberFormat::Styled { + style: Nbt::read_from(buf)?, + }), + NumberFormatKind::Fixed => Ok(NumberFormat::Fixed { + value: FormattedText::read_from(buf)?, + }), + } + } +} + +#[cfg(feature = "azalea-buf")] +impl McBufWritable for NumberFormat { + fn write_into(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { + match self { + NumberFormat::Blank => NumberFormatKind::Blank.write_into(buf)?, + NumberFormat::Styled { style } => { + NumberFormatKind::Styled.write_into(buf)?; + style.write_into(buf)?; + } + NumberFormat::Fixed { value } => { + NumberFormatKind::Fixed.write_into(buf)?; + value.write_into(buf)?; + } + } + Ok(()) + } +} diff --git a/azalea-client/src/packet_handling/configuration.rs b/azalea-client/src/packet_handling/configuration.rs index e26e3f3b0..315ae4290 100644 --- a/azalea-client/src/packet_handling/configuration.rs +++ b/azalea-client/src/packet_handling/configuration.rs @@ -179,7 +179,7 @@ pub fn process_packet_events(ecs: &mut World) { .write_packet(ServerboundPongPacket { id: p.id }.get()) .unwrap(); } - ClientboundConfigurationPacket::ResourcePack(p) => { + ClientboundConfigurationPacket::ResourcePackPush(p) => { debug!("Got resource pack packet {p:?}"); let mut system_state: SystemState> = SystemState::new(ecs); @@ -188,9 +188,15 @@ pub fn process_packet_events(ecs: &mut World) { // always accept resource pack raw_connection.write_packet( - ServerboundResourcePackPacket { action: azalea_protocol::packets::configuration::serverbound_resource_pack_packet::Action::Accepted }.get() + ServerboundResourcePackPacket { + id: p.id, + action: azalea_protocol::packets::configuration::serverbound_resource_pack_packet::Action::Accepted + }.get() ).unwrap(); } + ClientboundConfigurationPacket::ResourcePackPop(_) => { + // we can ignore this + } ClientboundConfigurationPacket::UpdateEnabledFeatures(p) => { debug!("Got update enabled features packet {p:?}"); } diff --git a/azalea-client/src/packet_handling/game.rs b/azalea-client/src/packet_handling/game.rs index ea3d97e4a..9861458cc 100644 --- a/azalea-client/src/packet_handling/game.rs +++ b/azalea-client/src/packet_handling/game.rs @@ -31,6 +31,7 @@ use azalea_world::{Instance, InstanceContainer, InstanceName, MinecraftEntityId, use bevy_ecs::{prelude::*, system::SystemState}; use log::{debug, error, trace, warn}; use parking_lot::RwLock; +use uuid::Uuid; use crate::{ chat::{ChatPacket, ChatReceivedEvent}, @@ -124,6 +125,9 @@ pub struct KeepAliveEvent { #[derive(Event, Debug, Clone)] pub struct ResourcePackEvent { pub entity: Entity, + /// The random ID for this request to download the resource pack. The packet + /// for replying to a resource pack push must contain the same ID. + pub id: Uuid, pub url: String, pub hash: String, pub required: bool, @@ -1269,7 +1273,7 @@ pub fn process_packet_events(ecs: &mut World) { } ClientboundGamePacket::PlayerLookAt(_) => {} ClientboundGamePacket::RemoveMobEffect(_) => {} - ClientboundGamePacket::ResourcePack(p) => { + ClientboundGamePacket::ResourcePackPush(p) => { debug!("Got resource pack packet {p:?}"); let mut system_state: SystemState> = @@ -1278,6 +1282,7 @@ pub fn process_packet_events(ecs: &mut World) { resource_pack_events.send(ResourcePackEvent { entity: player_entity, + id: p.id, url: p.url, hash: p.hash, required: p.required, @@ -1286,6 +1291,7 @@ pub fn process_packet_events(ecs: &mut World) { system_state.apply(ecs); } + ClientboundGamePacket::ResourcePackPop(_) => {} ClientboundGamePacket::Respawn(p) => { debug!("Got respawn packet {p:?}"); @@ -1404,6 +1410,8 @@ pub fn process_packet_events(ecs: &mut World) { ClientboundGamePacket::StartConfiguration(_) => {} ClientboundGamePacket::TickingState(_) => {} ClientboundGamePacket::TickingStep(_) => {} + + ClientboundGamePacket::ResetScore(_) => {} } } } diff --git a/azalea-core/src/lib.rs b/azalea-core/src/lib.rs index 3b29f6a22..1502b8a53 100755 --- a/azalea-core/src/lib.rs +++ b/azalea-core/src/lib.rs @@ -12,6 +12,7 @@ pub mod difficulty; pub mod direction; pub mod game_type; pub mod math; +pub mod objectives; pub mod particle; pub mod position; pub mod resource_location; diff --git a/azalea-core/src/objectives.rs b/azalea-core/src/objectives.rs new file mode 100644 index 000000000..dd1534f20 --- /dev/null +++ b/azalea-core/src/objectives.rs @@ -0,0 +1,33 @@ +use std::{ + fmt::{self, Display, Formatter}, + str::FromStr, +}; + +use azalea_buf::McBuf; + +#[derive(Clone, Copy, Debug, McBuf)] +pub enum ObjectiveCriteria { + Integer, + Hearts, +} + +impl Display for ObjectiveCriteria { + fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result { + match self { + ObjectiveCriteria::Integer => write!(f, "integer"), + ObjectiveCriteria::Hearts => write!(f, "hearts"), + } + } +} + +impl FromStr for ObjectiveCriteria { + type Err = (); + + fn from_str(s: &str) -> Result { + match s { + "integer" => Ok(ObjectiveCriteria::Integer), + "hearts" => Ok(ObjectiveCriteria::Hearts), + _ => Err(()), + } + } +} diff --git a/azalea-language/src/en_us.json b/azalea-language/src/en_us.json index 9cbc6718f..172d21770 100755 --- a/azalea-language/src/en_us.json +++ b/azalea-language/src/en_us.json @@ -359,6 +359,7 @@ "argument.rotation.incomplete": "Incomplete (expected 2 coordinates)", "argument.scoreboardDisplaySlot.invalid": "Unknown display slot '%s'", "argument.scoreHolder.empty": "No relevant score holders could be found", + "argument.style.invalid": "Invalid style: %s", "argument.time.invalid_tick_count": "Tick count must be non-negative", "argument.time.invalid_unit": "Invalid unit", "argument.time.tick_count_too_low": "Tick count must not be less than %s, found %s", @@ -1948,6 +1949,7 @@ "block.minecraft.sea_pickle": "Sea Pickle", "block.minecraft.seagrass": "Seagrass", "block.minecraft.set_spawn": "Respawn point set", + "block.minecraft.short_grass": "Short Grass", "block.minecraft.shroomlight": "Shroomlight", "block.minecraft.shulker_box": "Shulker Box", "block.minecraft.skeleton_skull": "Skeleton Skull", @@ -2478,6 +2480,7 @@ "commands.jfr.started": "JFR profiling started", "commands.jfr.stopped": "JFR profiling stopped and dumped to %s", "commands.kick.owner.failed": "Cannot kick server owner in LAN game", + "commands.kick.singleplayer.failed": "Cannot kick in an offline singleplayer game", "commands.kick.success": "Kicked %s: %s", "commands.kill.success.multiple": "Killed %s entities", "commands.kill.success.single": "Killed %s", @@ -2568,11 +2571,23 @@ "commands.scoreboard.objectives.display.set": "Set display slot %s to show objective %s", "commands.scoreboard.objectives.list.empty": "There are no objectives", "commands.scoreboard.objectives.list.success": "There are %s objective(s): %s", + "commands.scoreboard.objectives.modify.displayAutoUpdate.disable": "Disabled display auto-update for objective %s", + "commands.scoreboard.objectives.modify.displayAutoUpdate.enable": "Enabled display auto-update for objective %s", "commands.scoreboard.objectives.modify.displayname": "Changed the display name of %s to %s", + "commands.scoreboard.objectives.modify.objectiveFormat.clear": "Cleared default number format of objective %s", + "commands.scoreboard.objectives.modify.objectiveFormat.set": "Changed default number format of objective %s", "commands.scoreboard.objectives.modify.rendertype": "Changed the render type of objective %s", "commands.scoreboard.objectives.remove.success": "Removed objective %s", "commands.scoreboard.players.add.success.multiple": "Added %s to %s for %s entities", "commands.scoreboard.players.add.success.single": "Added %s to %s for %s (now %s)", + "commands.scoreboard.players.display.name.clear.success.multiple": "Cleared display name for %s entities in %s", + "commands.scoreboard.players.display.name.clear.success.single": "Cleared display name for %s in %s", + "commands.scoreboard.players.display.name.set.success.multiple": "Changed display name to %s for %s entities in %s", + "commands.scoreboard.players.display.name.set.success.single": "Changed display name to %s for %s in %s", + "commands.scoreboard.players.display.numberFormat.clear.success.multiple": "Cleared number format for %s entities in %s", + "commands.scoreboard.players.display.numberFormat.clear.success.single": "Cleared number format for %s in %s", + "commands.scoreboard.players.display.numberFormat.set.success.multiple": "Changed number format for %s entities in %s", + "commands.scoreboard.players.display.numberFormat.set.success.single": "Changed number format for %s in %s", "commands.scoreboard.players.enable.failed": "Nothing changed. That trigger is already enabled", "commands.scoreboard.players.enable.invalid": "Enable only works on trigger-objectives", "commands.scoreboard.players.enable.success.multiple": "Enabled trigger %s for %s entities", @@ -3082,6 +3097,9 @@ "disconnect.spam": "Kicked for spamming", "disconnect.timeout": "Timed out", "disconnect.unknownHost": "Unknown host", + "download.pack.progress.bytes": "Progress: %s (total size unknown)", + "download.pack.progress.percent": "Progress: %s%%", + "download.pack.title": "Downloading resource pack %s/%s", "editGamerule.default": "Default: %s", "editGamerule.title": "Edit Game Rules", "effect.duration.infinite": "\u221e", @@ -4974,6 +4992,7 @@ "options.accessibility.high_contrast.tooltip": "Enhances the contrast of UI elements", "options.accessibility.link": "Accessibility Guide", "options.accessibility.narrator_hotkey": "Narrator Hotkey", + "options.accessibility.narrator_hotkey.mac.tooltip": "Allows the Narrator to be toggled on and off with 'Cmd+B'", "options.accessibility.narrator_hotkey.tooltip": "Allows the Narrator to be toggled on and off with 'Ctrl+B'", "options.accessibility.panorama_speed": "Panorama Scroll Speed", "options.accessibility.text_background": "Text Background", @@ -5914,7 +5933,7 @@ "subtitles.entity.generic.small_fall": "Something trips", "subtitles.entity.generic.splash": "Splashing", "subtitles.entity.generic.swim": "Swimming", - "subtitles.entity.generic.wind_burst": "Wind charge bursts", + "subtitles.entity.generic.wind_burst": "Wind Charge bursts", "subtitles.entity.ghast.ambient": "Ghast cries", "subtitles.entity.ghast.death": "Ghast dies", "subtitles.entity.ghast.hurt": "Ghast hurts", diff --git a/azalea-physics/src/collision/blocks.rs b/azalea-physics/src/collision/blocks.rs index 4de8244f3..aec40f37d 100644 --- a/azalea-physics/src/collision/blocks.rs +++ b/azalea-physics/src/collision/blocks.rs @@ -1915,21 +1915,21 @@ impl BlockWithShape for BlockState { | 22000 | 22318 | 22800..=22927 - | 24761..=24815 - | 24819..=24834 - | 24842..=24843 + | 24769..=24823 + | 24827..=24842 | 24850..=24851 | 24858..=24859 - | 24866..=24893 - | 24992 - | 24995 - | 25403 - | 25406 - | 25814 - | 25817 - | 26225 - | 26228 - | 26564 => &SHAPE0, + | 24866..=24867 + | 24874..=24901 + | 25000 + | 25003 + | 25411 + | 25414 + | 25822 + | 25825 + | 26233 + | 26236 + | 26572 => &SHAPE0, 1688 | 1690 | 1693 | 1695 | 1704 | 1706 | 1709 | 1711 | 1720 | 1722 | 1725 | 1727 | 1736 | 1738 | 1741 | 1743 | 1752 | 1754 | 1757 | 1759 | 1768 | 1770 | 1773 | 1775 | 1784 | 1786 | 1789 | 1791 | 1800 | 1802 | 1805 | 1807 | 1816 | 1818 | 1821 | 1823 @@ -2108,10 +2108,10 @@ impl BlockWithShape for BlockState { | 23388..=23389 | 23468..=23469 | 23548..=23549 - | 24900..=24901 - | 25311..=25312 - | 25722..=25723 - | 26133..=26134 => &SHAPE29, + | 24908..=24909 + | 25319..=25320 + | 25730..=25731 + | 26141..=26142 => &SHAPE29, 2876..=2877 | 2918..=2919 | 4684..=4685 @@ -2216,14 +2216,14 @@ impl BlockWithShape for BlockState { | 23512..=23513 | 23550..=23551 | 23592..=23593 - | 24902..=24903 - | 24944..=24945 - | 25313..=25314 - | 25355..=25356 - | 25724..=25725 - | 25766..=25767 - | 26135..=26136 - | 26177..=26178 => &SHAPE30, + | 24910..=24911 + | 24952..=24953 + | 25321..=25322 + | 25363..=25364 + | 25732..=25733 + | 25774..=25775 + | 26143..=26144 + | 26185..=26186 => &SHAPE30, 2878..=2879 | 2936..=2937 | 4686..=4687 @@ -2328,14 +2328,14 @@ impl BlockWithShape for BlockState { | 23530..=23531 | 23552..=23553 | 23610..=23611 - | 24904..=24905 - | 24962..=24963 - | 25315..=25316 - | 25373..=25374 - | 25726..=25727 - | 25784..=25785 - | 26137..=26138 - | 26195..=26196 => &SHAPE31, + | 24912..=24913 + | 24970..=24971 + | 25323..=25324 + | 25381..=25382 + | 25734..=25735 + | 25792..=25793 + | 26145..=26146 + | 26203..=26204 => &SHAPE31, 2880..=2881 | 2922..=2923 | 4688..=4689 @@ -2440,14 +2440,14 @@ impl BlockWithShape for BlockState { | 23516..=23517 | 23554..=23555 | 23596..=23597 - | 24906..=24907 - | 24948..=24949 - | 25317..=25318 - | 25359..=25360 - | 25728..=25729 - | 25770..=25771 - | 26139..=26140 - | 26181..=26182 => &SHAPE32, + | 24914..=24915 + | 24956..=24957 + | 25325..=25326 + | 25367..=25368 + | 25736..=25737 + | 25778..=25779 + | 26147..=26148 + | 26189..=26190 => &SHAPE32, 2882..=2883 | 2940..=2941 | 4690..=4691 @@ -2552,14 +2552,14 @@ impl BlockWithShape for BlockState { | 23534..=23535 | 23556..=23557 | 23614..=23615 - | 24908..=24909 - | 24966..=24967 - | 25319..=25320 - | 25377..=25378 - | 25730..=25731 - | 25788..=25789 - | 26141..=26142 - | 26199..=26200 => &SHAPE33, + | 24916..=24917 + | 24974..=24975 + | 25327..=25328 + | 25385..=25386 + | 25738..=25739 + | 25796..=25797 + | 26149..=26150 + | 26207..=26208 => &SHAPE33, 2884..=2885 | 4692..=4693 | 7039..=7040 @@ -2612,10 +2612,10 @@ impl BlockWithShape for BlockState { | 23398..=23399 | 23478..=23479 | 23558..=23559 - | 24910..=24911 - | 25321..=25322 - | 25732..=25733 - | 26143..=26144 => &SHAPE34, + | 24918..=24919 + | 25329..=25330 + | 25740..=25741 + | 26151..=26152 => &SHAPE34, 2886..=2887 | 2928..=2929 | 4694..=4695 @@ -2720,14 +2720,14 @@ impl BlockWithShape for BlockState { | 23522..=23523 | 23560..=23561 | 23602..=23603 - | 24912..=24913 - | 24954..=24955 - | 25323..=25324 - | 25365..=25366 - | 25734..=25735 - | 25776..=25777 - | 26145..=26146 - | 26187..=26188 => &SHAPE35, + | 24920..=24921 + | 24962..=24963 + | 25331..=25332 + | 25373..=25374 + | 25742..=25743 + | 25784..=25785 + | 26153..=26154 + | 26195..=26196 => &SHAPE35, 2888..=2889 | 2946..=2947 | 4696..=4697 @@ -2832,14 +2832,14 @@ impl BlockWithShape for BlockState { | 23540..=23541 | 23562..=23563 | 23620..=23621 - | 24914..=24915 - | 24972..=24973 - | 25325..=25326 - | 25383..=25384 - | 25736..=25737 - | 25794..=25795 - | 26147..=26148 - | 26205..=26206 => &SHAPE36, + | 24922..=24923 + | 24980..=24981 + | 25333..=25334 + | 25391..=25392 + | 25744..=25745 + | 25802..=25803 + | 26155..=26156 + | 26213..=26214 => &SHAPE36, 2890..=2891 | 2932..=2933 | 4698..=4699 @@ -2944,14 +2944,14 @@ impl BlockWithShape for BlockState { | 23526..=23527 | 23564..=23565 | 23606..=23607 - | 24916..=24917 - | 24958..=24959 - | 25327..=25328 - | 25369..=25370 - | 25738..=25739 - | 25780..=25781 - | 26149..=26150 - | 26191..=26192 => &SHAPE37, + | 24924..=24925 + | 24966..=24967 + | 25335..=25336 + | 25377..=25378 + | 25746..=25747 + | 25788..=25789 + | 26157..=26158 + | 26199..=26200 => &SHAPE37, 2892..=2893 | 2950..=2951 | 4700..=4701 @@ -3056,14 +3056,14 @@ impl BlockWithShape for BlockState { | 23544..=23545 | 23566..=23567 | 23624..=23625 - | 24918..=24919 - | 24976..=24977 - | 25329..=25330 - | 25387..=25388 - | 25740..=25741 - | 25798..=25799 - | 26151..=26152 - | 26209..=26210 => &SHAPE38, + | 24926..=24927 + | 24984..=24985 + | 25337..=25338 + | 25395..=25396 + | 25748..=25749 + | 25806..=25807 + | 26159..=26160 + | 26217..=26218 => &SHAPE38, 2894..=2895 | 4702..=4703 | 7049..=7050 @@ -3116,10 +3116,10 @@ impl BlockWithShape for BlockState { | 23408..=23409 | 23488..=23489 | 23568..=23569 - | 24920..=24921 - | 25331..=25332 - | 25742..=25743 - | 26153..=26154 => &SHAPE39, + | 24928..=24929 + | 25339..=25340 + | 25750..=25751 + | 26161..=26162 => &SHAPE39, 2896..=2897 | 2938..=2939 | 4704..=4705 @@ -3224,14 +3224,14 @@ impl BlockWithShape for BlockState { | 23532..=23533 | 23570..=23571 | 23612..=23613 - | 24922..=24923 - | 24964..=24965 - | 25333..=25334 - | 25375..=25376 - | 25744..=25745 - | 25786..=25787 - | 26155..=26156 - | 26197..=26198 => &SHAPE40, + | 24930..=24931 + | 24972..=24973 + | 25341..=25342 + | 25383..=25384 + | 25752..=25753 + | 25794..=25795 + | 26163..=26164 + | 26205..=26206 => &SHAPE40, 2898..=2899 | 2916..=2917 | 4706..=4707 @@ -3336,14 +3336,14 @@ impl BlockWithShape for BlockState { | 23510..=23511 | 23572..=23573 | 23590..=23591 - | 24924..=24925 - | 24942..=24943 - | 25335..=25336 - | 25353..=25354 - | 25746..=25747 - | 25764..=25765 - | 26157..=26158 - | 26175..=26176 => &SHAPE41, + | 24932..=24933 + | 24950..=24951 + | 25343..=25344 + | 25361..=25362 + | 25754..=25755 + | 25772..=25773 + | 26165..=26166 + | 26183..=26184 => &SHAPE41, 2900..=2901 | 2942..=2943 | 4708..=4709 @@ -3448,14 +3448,14 @@ impl BlockWithShape for BlockState { | 23536..=23537 | 23574..=23575 | 23616..=23617 - | 24926..=24927 - | 24968..=24969 - | 25337..=25338 - | 25379..=25380 - | 25748..=25749 - | 25790..=25791 - | 26159..=26160 - | 26201..=26202 => &SHAPE42, + | 24934..=24935 + | 24976..=24977 + | 25345..=25346 + | 25387..=25388 + | 25756..=25757 + | 25798..=25799 + | 26167..=26168 + | 26209..=26210 => &SHAPE42, 2902..=2903 | 2920..=2921 | 4710..=4711 @@ -3560,14 +3560,14 @@ impl BlockWithShape for BlockState { | 23514..=23515 | 23576..=23577 | 23594..=23595 - | 24928..=24929 - | 24946..=24947 - | 25339..=25340 - | 25357..=25358 - | 25750..=25751 - | 25768..=25769 - | 26161..=26162 - | 26179..=26180 => &SHAPE43, + | 24936..=24937 + | 24954..=24955 + | 25347..=25348 + | 25365..=25366 + | 25758..=25759 + | 25776..=25777 + | 26169..=26170 + | 26187..=26188 => &SHAPE43, 2904..=2905 | 4712..=4713 | 7059..=7060 @@ -3620,10 +3620,10 @@ impl BlockWithShape for BlockState { | 23418..=23419 | 23498..=23499 | 23578..=23579 - | 24930..=24931 - | 25341..=25342 - | 25752..=25753 - | 26163..=26164 => &SHAPE44, + | 24938..=24939 + | 25349..=25350 + | 25760..=25761 + | 26171..=26172 => &SHAPE44, 2906..=2907 | 2948..=2949 | 4714..=4715 @@ -3728,14 +3728,14 @@ impl BlockWithShape for BlockState { | 23542..=23543 | 23580..=23581 | 23622..=23623 - | 24932..=24933 - | 24974..=24975 - | 25343..=25344 - | 25385..=25386 - | 25754..=25755 - | 25796..=25797 - | 26165..=26166 - | 26207..=26208 => &SHAPE45, + | 24940..=24941 + | 24982..=24983 + | 25351..=25352 + | 25393..=25394 + | 25762..=25763 + | 25804..=25805 + | 26173..=26174 + | 26215..=26216 => &SHAPE45, 2908..=2909 | 2926..=2927 | 4716..=4717 @@ -3840,14 +3840,14 @@ impl BlockWithShape for BlockState { | 23520..=23521 | 23582..=23583 | 23600..=23601 - | 24934..=24935 - | 24952..=24953 - | 25345..=25346 - | 25363..=25364 - | 25756..=25757 - | 25774..=25775 - | 26167..=26168 - | 26185..=26186 => &SHAPE46, + | 24942..=24943 + | 24960..=24961 + | 25353..=25354 + | 25371..=25372 + | 25764..=25765 + | 25782..=25783 + | 26175..=26176 + | 26193..=26194 => &SHAPE46, 2910..=2911 | 2952..=2953 | 4718..=4719 @@ -3952,14 +3952,14 @@ impl BlockWithShape for BlockState { | 23546..=23547 | 23584..=23585 | 23626..=23627 - | 24936..=24937 - | 24978..=24979 - | 25347..=25348 - | 25389..=25390 - | 25758..=25759 - | 25800..=25801 - | 26169..=26170 - | 26211..=26212 => &SHAPE47, + | 24944..=24945 + | 24986..=24987 + | 25355..=25356 + | 25397..=25398 + | 25766..=25767 + | 25808..=25809 + | 26177..=26178 + | 26219..=26220 => &SHAPE47, 2912..=2913 | 2930..=2931 | 4720..=4721 @@ -4064,14 +4064,14 @@ impl BlockWithShape for BlockState { | 23524..=23525 | 23586..=23587 | 23604..=23605 - | 24938..=24939 - | 24956..=24957 - | 25349..=25350 - | 25367..=25368 - | 25760..=25761 - | 25778..=25779 - | 26171..=26172 - | 26189..=26190 => &SHAPE48, + | 24946..=24947 + | 24964..=24965 + | 25357..=25358 + | 25375..=25376 + | 25768..=25769 + | 25786..=25787 + | 26179..=26180 + | 26197..=26198 => &SHAPE48, 2914..=2915 | 4722..=4723 | 7069..=7070 @@ -4124,10 +4124,10 @@ impl BlockWithShape for BlockState { | 23428..=23429 | 23508..=23509 | 23588..=23589 - | 24940..=24941 - | 25351..=25352 - | 25762..=25763 - | 26173..=26174 => &SHAPE49, + | 24948..=24949 + | 25359..=25360 + | 25770..=25771 + | 26181..=26182 => &SHAPE49, 2924..=2925 | 4732..=4733 | 7079..=7080 @@ -4180,10 +4180,10 @@ impl BlockWithShape for BlockState { | 23438..=23439 | 23518..=23519 | 23598..=23599 - | 24950..=24951 - | 25361..=25362 - | 25772..=25773 - | 26183..=26184 => &SHAPE50, + | 24958..=24959 + | 25369..=25370 + | 25780..=25781 + | 26191..=26192 => &SHAPE50, 2934..=2935 | 4742..=4743 | 7089..=7090 @@ -4236,10 +4236,10 @@ impl BlockWithShape for BlockState { | 23448..=23449 | 23528..=23529 | 23608..=23609 - | 24960..=24961 - | 25371..=25372 - | 25782..=25783 - | 26193..=26194 => &SHAPE51, + | 24968..=24969 + | 25379..=25380 + | 25790..=25791 + | 26201..=26202 => &SHAPE51, 2944..=2945 | 4752..=4753 | 7099..=7100 @@ -4292,10 +4292,10 @@ impl BlockWithShape for BlockState { | 23458..=23459 | 23538..=23539 | 23618..=23619 - | 24970..=24971 - | 25381..=25382 - | 25792..=25793 - | 26203..=26204 => &SHAPE52, + | 24978..=24979 + | 25389..=25390 + | 25800..=25801 + | 26211..=26212 => &SHAPE52, 2954..=2955 | 2960..=2961 | 2966..=2967 @@ -5183,12 +5183,12 @@ impl BlockWithShape for BlockState { | 23636..=23637 | 23642..=23643 | 23648..=23649 - | 24982..=24983 - | 25393..=25394 - | 25804..=25805 - | 26215..=26216 => &SHAPE8, + | 24990..=24991 + | 25401..=25402 + | 25812..=25813 + | 26223..=26224 => &SHAPE8, 5777 => &SHAPE60, - 5779 | 5850 | 24895 => &SHAPE61, + 5779 | 5850 | 24903 => &SHAPE61, 5782..=5797 | 19445 => &SHAPE71, 5817 | 5819 | 7273 | 7275 | 11566 | 11568 | 11598 | 11600 | 11630 | 11632 | 11662 | 11664 | 11694 | 11696 | 11726 | 11728 | 11758 | 11760 | 11790 | 11792 | 18684 @@ -5623,7 +5623,7 @@ impl BlockWithShape for BlockState { 7398..=7405 => &SHAPE121, 7407..=7410 => &SHAPE122, 7411..=7414 => &SHAPE123, - 7416 | 26566..=26581 => &SHAPE72, + 7416 | 26574..=26589 => &SHAPE72, 7419 => &SHAPE124, 7420 => &SHAPE125, 7421 => &SHAPE126, @@ -5640,7 +5640,7 @@ impl BlockWithShape for BlockState { | 15135 | 15456 | 15459 | 15780 | 15783 | 16104 | 16107 | 16428 | 16431 | 16752 | 16755 | 17076 | 17079 | 17400 | 17403 | 17724 | 17727 | 18048 | 18051 | 19541 | 19544 | 19961 | 19964 | 20398 | 20401 | 21168 | 21171 | 21579 | 21582 | 21991 - | 21994 | 24986 | 24989 | 25397 | 25400 | 25808 | 25811 | 26219 | 26222 => &SHAPE136, + | 21994 | 24994 | 24997 | 25405 | 25408 | 25816 | 25819 | 26227 | 26230 => &SHAPE136, 7920..=7921 | 7923..=7924 | 8244..=8245 @@ -5683,14 +5683,14 @@ impl BlockWithShape for BlockState { | 21583..=21584 | 21992..=21993 | 21995..=21996 - | 24987..=24988 - | 24990..=24991 - | 25398..=25399 - | 25401..=25402 - | 25809..=25810 - | 25812..=25813 - | 26220..=26221 - | 26223..=26224 => &SHAPE137, + | 24995..=24996 + | 24998..=24999 + | 25406..=25407 + | 25409..=25410 + | 25817..=25818 + | 25820..=25821 + | 26228..=26229 + | 26231..=26232 => &SHAPE137, 7926..=7927 | 7929..=7930 | 8250..=8251 @@ -5733,14 +5733,14 @@ impl BlockWithShape for BlockState { | 21589..=21590 | 21998..=21999 | 22001..=22002 - | 24993..=24994 - | 24996..=24997 - | 25404..=25405 - | 25407..=25408 - | 25815..=25816 - | 25818..=25819 - | 26226..=26227 - | 26229..=26230 => &SHAPE138, + | 25001..=25002 + | 25004..=25005 + | 25412..=25413 + | 25415..=25416 + | 25823..=25824 + | 25826..=25827 + | 26234..=26235 + | 26237..=26238 => &SHAPE138, 7931 | 7934 | 7943 | 7946 | 8255 | 8258 | 8267 | 8270 | 14172 | 14175 | 14184 | 14187 | 14496 | 14499 | 14508 | 14511 | 14820 | 14823 | 14832 | 14835 | 15144 | 15147 | 15156 | 15159 | 15468 | 15471 | 15480 | 15483 | 15792 | 15795 | 15804 @@ -5749,8 +5749,8 @@ impl BlockWithShape for BlockState { | 17427 | 17736 | 17739 | 17748 | 17751 | 18060 | 18063 | 18072 | 18075 | 19553 | 19556 | 19565 | 19568 | 19973 | 19976 | 19985 | 19988 | 20410 | 20413 | 20422 | 20425 | 21180 | 21183 | 21192 | 21195 | 21591 | 21594 | 21603 | 21606 | 22003 - | 22006 | 22015 | 22018 | 24998 | 25001 | 25010 | 25013 | 25409 | 25412 | 25421 - | 25424 | 25820 | 25823 | 25832 | 25835 | 26231 | 26234 | 26243 | 26246 => &SHAPE139, + | 22006 | 22015 | 22018 | 25006 | 25009 | 25018 | 25021 | 25417 | 25420 | 25429 + | 25432 | 25828 | 25831 | 25840 | 25843 | 26239 | 26242 | 26251 | 26254 => &SHAPE139, 7932..=7933 | 7935..=7936 | 7944..=7945 @@ -5835,22 +5835,22 @@ impl BlockWithShape for BlockState { | 22007..=22008 | 22016..=22017 | 22019..=22020 - | 24999..=25000 - | 25002..=25003 - | 25011..=25012 - | 25014..=25015 - | 25410..=25411 - | 25413..=25414 - | 25422..=25423 - | 25425..=25426 - | 25821..=25822 - | 25824..=25825 - | 25833..=25834 - | 25836..=25837 - | 26232..=26233 - | 26235..=26236 - | 26244..=26245 - | 26247..=26248 => &SHAPE140, + | 25007..=25008 + | 25010..=25011 + | 25019..=25020 + | 25022..=25023 + | 25418..=25419 + | 25421..=25422 + | 25430..=25431 + | 25433..=25434 + | 25829..=25830 + | 25832..=25833 + | 25841..=25842 + | 25844..=25845 + | 26240..=26241 + | 26243..=26244 + | 26252..=26253 + | 26255..=26256 => &SHAPE140, 7937 | 7940 | 7949 | 7952 | 8261 | 8264 | 8273 | 8276 | 14178 | 14181 | 14190 | 14193 | 14502 | 14505 | 14514 | 14517 | 14826 | 14829 | 14838 | 14841 | 15150 | 15153 | 15162 | 15165 | 15474 | 15477 | 15486 | 15489 | 15798 | 15801 | 15810 @@ -5859,8 +5859,8 @@ impl BlockWithShape for BlockState { | 17433 | 17742 | 17745 | 17754 | 17757 | 18066 | 18069 | 18078 | 18081 | 19559 | 19562 | 19571 | 19574 | 19979 | 19982 | 19991 | 19994 | 20416 | 20419 | 20428 | 20431 | 21186 | 21189 | 21198 | 21201 | 21597 | 21600 | 21609 | 21612 | 22009 - | 22012 | 22021 | 22024 | 25004 | 25007 | 25016 | 25019 | 25415 | 25418 | 25427 - | 25430 | 25826 | 25829 | 25838 | 25841 | 26237 | 26240 | 26249 | 26252 => &SHAPE141, + | 22012 | 22021 | 22024 | 25012 | 25015 | 25024 | 25027 | 25423 | 25426 | 25435 + | 25438 | 25834 | 25837 | 25846 | 25849 | 26245 | 26248 | 26257 | 26260 => &SHAPE141, 7938..=7939 | 7941..=7942 | 7950..=7951 @@ -5945,22 +5945,22 @@ impl BlockWithShape for BlockState { | 22013..=22014 | 22022..=22023 | 22025..=22026 - | 25005..=25006 - | 25008..=25009 - | 25017..=25018 - | 25020..=25021 - | 25416..=25417 - | 25419..=25420 - | 25428..=25429 - | 25431..=25432 - | 25827..=25828 - | 25830..=25831 - | 25839..=25840 - | 25842..=25843 - | 26238..=26239 - | 26241..=26242 - | 26250..=26251 - | 26253..=26254 => &SHAPE142, + | 25013..=25014 + | 25016..=25017 + | 25025..=25026 + | 25028..=25029 + | 25424..=25425 + | 25427..=25428 + | 25436..=25437 + | 25439..=25440 + | 25835..=25836 + | 25838..=25839 + | 25847..=25848 + | 25850..=25851 + | 26246..=26247 + | 26249..=26250 + | 26258..=26259 + | 26261..=26262 => &SHAPE142, 7955 | 7958 | 7991 | 7994 | 8279 | 8282 | 8315 | 8318 | 14196 | 14199 | 14232 | 14235 | 14520 | 14523 | 14556 | 14559 | 14844 | 14847 | 14880 | 14883 | 15168 | 15171 | 15204 | 15207 | 15492 | 15495 | 15528 | 15531 | 15816 | 15819 | 15852 @@ -5969,8 +5969,8 @@ impl BlockWithShape for BlockState { | 17475 | 17760 | 17763 | 17796 | 17799 | 18084 | 18087 | 18120 | 18123 | 19577 | 19580 | 19613 | 19616 | 19997 | 20000 | 20033 | 20036 | 20434 | 20437 | 20470 | 20473 | 21204 | 21207 | 21240 | 21243 | 21615 | 21618 | 21651 | 21654 | 22027 - | 22030 | 22063 | 22066 | 25022 | 25025 | 25058 | 25061 | 25433 | 25436 | 25469 - | 25472 | 25844 | 25847 | 25880 | 25883 | 26255 | 26258 | 26291 | 26294 => &SHAPE143, + | 22030 | 22063 | 22066 | 25030 | 25033 | 25066 | 25069 | 25441 | 25444 | 25477 + | 25480 | 25852 | 25855 | 25888 | 25891 | 26263 | 26266 | 26299 | 26302 => &SHAPE143, 7956..=7957 | 7959..=7960 | 7992..=7993 @@ -6055,22 +6055,22 @@ impl BlockWithShape for BlockState { | 22031..=22032 | 22064..=22065 | 22067..=22068 - | 25023..=25024 - | 25026..=25027 - | 25059..=25060 - | 25062..=25063 - | 25434..=25435 - | 25437..=25438 - | 25470..=25471 - | 25473..=25474 - | 25845..=25846 - | 25848..=25849 - | 25881..=25882 - | 25884..=25885 - | 26256..=26257 - | 26259..=26260 - | 26292..=26293 - | 26295..=26296 => &SHAPE144, + | 25031..=25032 + | 25034..=25035 + | 25067..=25068 + | 25070..=25071 + | 25442..=25443 + | 25445..=25446 + | 25478..=25479 + | 25481..=25482 + | 25853..=25854 + | 25856..=25857 + | 25889..=25890 + | 25892..=25893 + | 26264..=26265 + | 26267..=26268 + | 26300..=26301 + | 26303..=26304 => &SHAPE144, 7961 | 7964 | 7997 | 8000 | 8285 | 8288 | 8321 | 8324 | 14202 | 14205 | 14238 | 14241 | 14526 | 14529 | 14562 | 14565 | 14850 | 14853 | 14886 | 14889 | 15174 | 15177 | 15210 | 15213 | 15498 | 15501 | 15534 | 15537 | 15822 | 15825 | 15858 @@ -6079,8 +6079,8 @@ impl BlockWithShape for BlockState { | 17481 | 17766 | 17769 | 17802 | 17805 | 18090 | 18093 | 18126 | 18129 | 19583 | 19586 | 19619 | 19622 | 20003 | 20006 | 20039 | 20042 | 20440 | 20443 | 20476 | 20479 | 21210 | 21213 | 21246 | 21249 | 21621 | 21624 | 21657 | 21660 | 22033 - | 22036 | 22069 | 22072 | 25028 | 25031 | 25064 | 25067 | 25439 | 25442 | 25475 - | 25478 | 25850 | 25853 | 25886 | 25889 | 26261 | 26264 | 26297 | 26300 => &SHAPE145, + | 22036 | 22069 | 22072 | 25036 | 25039 | 25072 | 25075 | 25447 | 25450 | 25483 + | 25486 | 25858 | 25861 | 25894 | 25897 | 26269 | 26272 | 26305 | 26308 => &SHAPE145, 7962..=7963 | 7965..=7966 | 7998..=7999 @@ -6165,22 +6165,22 @@ impl BlockWithShape for BlockState { | 22037..=22038 | 22070..=22071 | 22073..=22074 - | 25029..=25030 - | 25032..=25033 - | 25065..=25066 - | 25068..=25069 - | 25440..=25441 - | 25443..=25444 - | 25476..=25477 - | 25479..=25480 - | 25851..=25852 - | 25854..=25855 - | 25887..=25888 - | 25890..=25891 - | 26262..=26263 - | 26265..=26266 - | 26298..=26299 - | 26301..=26302 => &SHAPE146, + | 25037..=25038 + | 25040..=25041 + | 25073..=25074 + | 25076..=25077 + | 25448..=25449 + | 25451..=25452 + | 25484..=25485 + | 25487..=25488 + | 25859..=25860 + | 25862..=25863 + | 25895..=25896 + | 25898..=25899 + | 26270..=26271 + | 26273..=26274 + | 26306..=26307 + | 26309..=26310 => &SHAPE146, 7967 | 7970 | 7979 | 7982 | 8003 | 8006 | 8015 | 8018 | 8291 | 8294 | 8303 | 8306 | 8327 | 8330 | 8339 | 8342 | 14208 | 14211 | 14220 | 14223 | 14244 | 14247 | 14256 | 14259 | 14532 | 14535 | 14544 | 14547 | 14568 | 14571 | 14580 | 14583 | 14856 @@ -6197,10 +6197,10 @@ impl BlockWithShape for BlockState { | 20048 | 20057 | 20060 | 20446 | 20449 | 20458 | 20461 | 20482 | 20485 | 20494 | 20497 | 21216 | 21219 | 21228 | 21231 | 21252 | 21255 | 21264 | 21267 | 21627 | 21630 | 21639 | 21642 | 21663 | 21666 | 21675 | 21678 | 22039 | 22042 | 22051 - | 22054 | 22075 | 22078 | 22087 | 22090 | 25034 | 25037 | 25046 | 25049 | 25070 - | 25073 | 25082 | 25085 | 25445 | 25448 | 25457 | 25460 | 25481 | 25484 | 25493 - | 25496 | 25856 | 25859 | 25868 | 25871 | 25892 | 25895 | 25904 | 25907 | 26267 - | 26270 | 26279 | 26282 | 26303 | 26306 | 26315 | 26318 => &SHAPE147, + | 22054 | 22075 | 22078 | 22087 | 22090 | 25042 | 25045 | 25054 | 25057 | 25078 + | 25081 | 25090 | 25093 | 25453 | 25456 | 25465 | 25468 | 25489 | 25492 | 25501 + | 25504 | 25864 | 25867 | 25876 | 25879 | 25900 | 25903 | 25912 | 25915 | 26275 + | 26278 | 26287 | 26290 | 26311 | 26314 | 26323 | 26326 => &SHAPE147, 7968..=7969 | 7971..=7972 | 7980..=7981 @@ -6369,38 +6369,38 @@ impl BlockWithShape for BlockState { | 22079..=22080 | 22088..=22089 | 22091..=22092 - | 25035..=25036 - | 25038..=25039 - | 25047..=25048 - | 25050..=25051 - | 25071..=25072 - | 25074..=25075 - | 25083..=25084 - | 25086..=25087 - | 25446..=25447 - | 25449..=25450 - | 25458..=25459 - | 25461..=25462 - | 25482..=25483 - | 25485..=25486 - | 25494..=25495 - | 25497..=25498 - | 25857..=25858 - | 25860..=25861 - | 25869..=25870 - | 25872..=25873 - | 25893..=25894 - | 25896..=25897 - | 25905..=25906 - | 25908..=25909 - | 26268..=26269 - | 26271..=26272 - | 26280..=26281 - | 26283..=26284 - | 26304..=26305 - | 26307..=26308 - | 26316..=26317 - | 26319..=26320 => &SHAPE148, + | 25043..=25044 + | 25046..=25047 + | 25055..=25056 + | 25058..=25059 + | 25079..=25080 + | 25082..=25083 + | 25091..=25092 + | 25094..=25095 + | 25454..=25455 + | 25457..=25458 + | 25466..=25467 + | 25469..=25470 + | 25490..=25491 + | 25493..=25494 + | 25502..=25503 + | 25505..=25506 + | 25865..=25866 + | 25868..=25869 + | 25877..=25878 + | 25880..=25881 + | 25901..=25902 + | 25904..=25905 + | 25913..=25914 + | 25916..=25917 + | 26276..=26277 + | 26279..=26280 + | 26288..=26289 + | 26291..=26292 + | 26312..=26313 + | 26315..=26316 + | 26324..=26325 + | 26327..=26328 => &SHAPE148, 7973 | 7976 | 7985 | 7988 | 8009 | 8012 | 8021 | 8024 | 8297 | 8300 | 8309 | 8312 | 8333 | 8336 | 8345 | 8348 | 14214 | 14217 | 14226 | 14229 | 14250 | 14253 | 14262 | 14265 | 14538 | 14541 | 14550 | 14553 | 14574 | 14577 | 14586 | 14589 | 14862 @@ -6417,10 +6417,10 @@ impl BlockWithShape for BlockState { | 20054 | 20063 | 20066 | 20452 | 20455 | 20464 | 20467 | 20488 | 20491 | 20500 | 20503 | 21222 | 21225 | 21234 | 21237 | 21258 | 21261 | 21270 | 21273 | 21633 | 21636 | 21645 | 21648 | 21669 | 21672 | 21681 | 21684 | 22045 | 22048 | 22057 - | 22060 | 22081 | 22084 | 22093 | 22096 | 25040 | 25043 | 25052 | 25055 | 25076 - | 25079 | 25088 | 25091 | 25451 | 25454 | 25463 | 25466 | 25487 | 25490 | 25499 - | 25502 | 25862 | 25865 | 25874 | 25877 | 25898 | 25901 | 25910 | 25913 | 26273 - | 26276 | 26285 | 26288 | 26309 | 26312 | 26321 | 26324 => &SHAPE149, + | 22060 | 22081 | 22084 | 22093 | 22096 | 25048 | 25051 | 25060 | 25063 | 25084 + | 25087 | 25096 | 25099 | 25459 | 25462 | 25471 | 25474 | 25495 | 25498 | 25507 + | 25510 | 25870 | 25873 | 25882 | 25885 | 25906 | 25909 | 25918 | 25921 | 26281 + | 26284 | 26293 | 26296 | 26317 | 26320 | 26329 | 26332 => &SHAPE149, 7974..=7975 | 7977..=7978 | 7986..=7987 @@ -6589,38 +6589,38 @@ impl BlockWithShape for BlockState { | 22085..=22086 | 22094..=22095 | 22097..=22098 - | 25041..=25042 - | 25044..=25045 - | 25053..=25054 - | 25056..=25057 - | 25077..=25078 - | 25080..=25081 - | 25089..=25090 - | 25092..=25093 - | 25452..=25453 - | 25455..=25456 - | 25464..=25465 - | 25467..=25468 - | 25488..=25489 - | 25491..=25492 - | 25500..=25501 - | 25503..=25504 - | 25863..=25864 - | 25866..=25867 - | 25875..=25876 - | 25878..=25879 - | 25899..=25900 - | 25902..=25903 - | 25911..=25912 - | 25914..=25915 - | 26274..=26275 - | 26277..=26278 - | 26286..=26287 - | 26289..=26290 - | 26310..=26311 - | 26313..=26314 - | 26322..=26323 - | 26325..=26326 => &SHAPE150, + | 25049..=25050 + | 25052..=25053 + | 25061..=25062 + | 25064..=25065 + | 25085..=25086 + | 25088..=25089 + | 25097..=25098 + | 25100..=25101 + | 25460..=25461 + | 25463..=25464 + | 25472..=25473 + | 25475..=25476 + | 25496..=25497 + | 25499..=25500 + | 25508..=25509 + | 25511..=25512 + | 25871..=25872 + | 25874..=25875 + | 25883..=25884 + | 25886..=25887 + | 25907..=25908 + | 25910..=25911 + | 25919..=25920 + | 25922..=25923 + | 26282..=26283 + | 26285..=26286 + | 26294..=26295 + | 26297..=26298 + | 26318..=26319 + | 26321..=26322 + | 26330..=26331 + | 26333..=26334 => &SHAPE150, 8027 | 8030 | 8135 | 8138 | 8351 | 8354 | 8459 | 8462 | 14268 | 14271 | 14376 | 14379 | 14592 | 14595 | 14700 | 14703 | 14916 | 14919 | 15024 | 15027 | 15240 | 15243 | 15348 | 15351 | 15564 | 15567 | 15672 | 15675 | 15888 | 15891 | 15996 @@ -6629,8 +6629,8 @@ impl BlockWithShape for BlockState { | 17619 | 17832 | 17835 | 17940 | 17943 | 18156 | 18159 | 18264 | 18267 | 19649 | 19652 | 19757 | 19760 | 20069 | 20072 | 20177 | 20180 | 20506 | 20509 | 20614 | 20617 | 21276 | 21279 | 21384 | 21387 | 21687 | 21690 | 21795 | 21798 | 22099 - | 22102 | 22207 | 22210 | 25094 | 25097 | 25202 | 25205 | 25505 | 25508 | 25613 - | 25616 | 25916 | 25919 | 26024 | 26027 | 26327 | 26330 | 26435 | 26438 => &SHAPE151, + | 22102 | 22207 | 22210 | 25102 | 25105 | 25210 | 25213 | 25513 | 25516 | 25621 + | 25624 | 25924 | 25927 | 26032 | 26035 | 26335 | 26338 | 26443 | 26446 => &SHAPE151, 8028..=8029 | 8031..=8032 | 8136..=8137 @@ -6715,22 +6715,22 @@ impl BlockWithShape for BlockState { | 22103..=22104 | 22208..=22209 | 22211..=22212 - | 25095..=25096 - | 25098..=25099 - | 25203..=25204 - | 25206..=25207 - | 25506..=25507 - | 25509..=25510 - | 25614..=25615 - | 25617..=25618 - | 25917..=25918 - | 25920..=25921 - | 26025..=26026 - | 26028..=26029 - | 26328..=26329 - | 26331..=26332 - | 26436..=26437 - | 26439..=26440 => &SHAPE152, + | 25103..=25104 + | 25106..=25107 + | 25211..=25212 + | 25214..=25215 + | 25514..=25515 + | 25517..=25518 + | 25622..=25623 + | 25625..=25626 + | 25925..=25926 + | 25928..=25929 + | 26033..=26034 + | 26036..=26037 + | 26336..=26337 + | 26339..=26340 + | 26444..=26445 + | 26447..=26448 => &SHAPE152, 8033 | 8036 | 8141 | 8144 | 8357 | 8360 | 8465 | 8468 | 14274 | 14277 | 14382 | 14385 | 14598 | 14601 | 14706 | 14709 | 14922 | 14925 | 15030 | 15033 | 15246 | 15249 | 15354 | 15357 | 15570 | 15573 | 15678 | 15681 | 15894 | 15897 | 16002 @@ -6739,8 +6739,8 @@ impl BlockWithShape for BlockState { | 17625 | 17838 | 17841 | 17946 | 17949 | 18162 | 18165 | 18270 | 18273 | 19655 | 19658 | 19763 | 19766 | 20075 | 20078 | 20183 | 20186 | 20512 | 20515 | 20620 | 20623 | 21282 | 21285 | 21390 | 21393 | 21693 | 21696 | 21801 | 21804 | 22105 - | 22108 | 22213 | 22216 | 25100 | 25103 | 25208 | 25211 | 25511 | 25514 | 25619 - | 25622 | 25922 | 25925 | 26030 | 26033 | 26333 | 26336 | 26441 | 26444 => &SHAPE153, + | 22108 | 22213 | 22216 | 25108 | 25111 | 25216 | 25219 | 25519 | 25522 | 25627 + | 25630 | 25930 | 25933 | 26038 | 26041 | 26341 | 26344 | 26449 | 26452 => &SHAPE153, 8034..=8035 | 8037..=8038 | 8142..=8143 @@ -6825,22 +6825,22 @@ impl BlockWithShape for BlockState { | 22109..=22110 | 22214..=22215 | 22217..=22218 - | 25101..=25102 - | 25104..=25105 - | 25209..=25210 - | 25212..=25213 - | 25512..=25513 - | 25515..=25516 - | 25620..=25621 - | 25623..=25624 - | 25923..=25924 - | 25926..=25927 - | 26031..=26032 - | 26034..=26035 - | 26334..=26335 - | 26337..=26338 - | 26442..=26443 - | 26445..=26446 => &SHAPE154, + | 25109..=25110 + | 25112..=25113 + | 25217..=25218 + | 25220..=25221 + | 25520..=25521 + | 25523..=25524 + | 25628..=25629 + | 25631..=25632 + | 25931..=25932 + | 25934..=25935 + | 26039..=26040 + | 26042..=26043 + | 26342..=26343 + | 26345..=26346 + | 26450..=26451 + | 26453..=26454 => &SHAPE154, 8039 | 8042 | 8051 | 8054 | 8147 | 8150 | 8159 | 8162 | 8363 | 8366 | 8375 | 8378 | 8471 | 8474 | 8483 | 8486 | 14280 | 14283 | 14292 | 14295 | 14388 | 14391 | 14400 | 14403 | 14604 | 14607 | 14616 | 14619 | 14712 | 14715 | 14724 | 14727 | 14928 @@ -6857,10 +6857,10 @@ impl BlockWithShape for BlockState { | 20192 | 20201 | 20204 | 20518 | 20521 | 20530 | 20533 | 20626 | 20629 | 20638 | 20641 | 21288 | 21291 | 21300 | 21303 | 21396 | 21399 | 21408 | 21411 | 21699 | 21702 | 21711 | 21714 | 21807 | 21810 | 21819 | 21822 | 22111 | 22114 | 22123 - | 22126 | 22219 | 22222 | 22231 | 22234 | 25106 | 25109 | 25118 | 25121 | 25214 - | 25217 | 25226 | 25229 | 25517 | 25520 | 25529 | 25532 | 25625 | 25628 | 25637 - | 25640 | 25928 | 25931 | 25940 | 25943 | 26036 | 26039 | 26048 | 26051 | 26339 - | 26342 | 26351 | 26354 | 26447 | 26450 | 26459 | 26462 => &SHAPE155, + | 22126 | 22219 | 22222 | 22231 | 22234 | 25114 | 25117 | 25126 | 25129 | 25222 + | 25225 | 25234 | 25237 | 25525 | 25528 | 25537 | 25540 | 25633 | 25636 | 25645 + | 25648 | 25936 | 25939 | 25948 | 25951 | 26044 | 26047 | 26056 | 26059 | 26347 + | 26350 | 26359 | 26362 | 26455 | 26458 | 26467 | 26470 => &SHAPE155, 8040..=8041 | 8043..=8044 | 8052..=8053 @@ -7029,38 +7029,38 @@ impl BlockWithShape for BlockState { | 22223..=22224 | 22232..=22233 | 22235..=22236 - | 25107..=25108 - | 25110..=25111 - | 25119..=25120 - | 25122..=25123 - | 25215..=25216 - | 25218..=25219 - | 25227..=25228 - | 25230..=25231 - | 25518..=25519 - | 25521..=25522 - | 25530..=25531 - | 25533..=25534 - | 25626..=25627 - | 25629..=25630 - | 25638..=25639 - | 25641..=25642 - | 25929..=25930 - | 25932..=25933 - | 25941..=25942 - | 25944..=25945 - | 26037..=26038 - | 26040..=26041 - | 26049..=26050 - | 26052..=26053 - | 26340..=26341 - | 26343..=26344 - | 26352..=26353 - | 26355..=26356 - | 26448..=26449 - | 26451..=26452 - | 26460..=26461 - | 26463..=26464 => &SHAPE156, + | 25115..=25116 + | 25118..=25119 + | 25127..=25128 + | 25130..=25131 + | 25223..=25224 + | 25226..=25227 + | 25235..=25236 + | 25238..=25239 + | 25526..=25527 + | 25529..=25530 + | 25538..=25539 + | 25541..=25542 + | 25634..=25635 + | 25637..=25638 + | 25646..=25647 + | 25649..=25650 + | 25937..=25938 + | 25940..=25941 + | 25949..=25950 + | 25952..=25953 + | 26045..=26046 + | 26048..=26049 + | 26057..=26058 + | 26060..=26061 + | 26348..=26349 + | 26351..=26352 + | 26360..=26361 + | 26363..=26364 + | 26456..=26457 + | 26459..=26460 + | 26468..=26469 + | 26471..=26472 => &SHAPE156, 8045 | 8048 | 8057 | 8060 | 8153 | 8156 | 8165 | 8168 | 8369 | 8372 | 8381 | 8384 | 8477 | 8480 | 8489 | 8492 | 14286 | 14289 | 14298 | 14301 | 14394 | 14397 | 14406 | 14409 | 14610 | 14613 | 14622 | 14625 | 14718 | 14721 | 14730 | 14733 | 14934 @@ -7077,10 +7077,10 @@ impl BlockWithShape for BlockState { | 20198 | 20207 | 20210 | 20524 | 20527 | 20536 | 20539 | 20632 | 20635 | 20644 | 20647 | 21294 | 21297 | 21306 | 21309 | 21402 | 21405 | 21414 | 21417 | 21705 | 21708 | 21717 | 21720 | 21813 | 21816 | 21825 | 21828 | 22117 | 22120 | 22129 - | 22132 | 22225 | 22228 | 22237 | 22240 | 25112 | 25115 | 25124 | 25127 | 25220 - | 25223 | 25232 | 25235 | 25523 | 25526 | 25535 | 25538 | 25631 | 25634 | 25643 - | 25646 | 25934 | 25937 | 25946 | 25949 | 26042 | 26045 | 26054 | 26057 | 26345 - | 26348 | 26357 | 26360 | 26453 | 26456 | 26465 | 26468 => &SHAPE157, + | 22132 | 22225 | 22228 | 22237 | 22240 | 25120 | 25123 | 25132 | 25135 | 25228 + | 25231 | 25240 | 25243 | 25531 | 25534 | 25543 | 25546 | 25639 | 25642 | 25651 + | 25654 | 25942 | 25945 | 25954 | 25957 | 26050 | 26053 | 26062 | 26065 | 26353 + | 26356 | 26365 | 26368 | 26461 | 26464 | 26473 | 26476 => &SHAPE157, 8046..=8047 | 8049..=8050 | 8058..=8059 @@ -7249,38 +7249,38 @@ impl BlockWithShape for BlockState { | 22229..=22230 | 22238..=22239 | 22241..=22242 - | 25113..=25114 - | 25116..=25117 - | 25125..=25126 - | 25128..=25129 - | 25221..=25222 - | 25224..=25225 - | 25233..=25234 - | 25236..=25237 - | 25524..=25525 - | 25527..=25528 - | 25536..=25537 - | 25539..=25540 - | 25632..=25633 - | 25635..=25636 - | 25644..=25645 - | 25647..=25648 - | 25935..=25936 - | 25938..=25939 - | 25947..=25948 - | 25950..=25951 - | 26043..=26044 - | 26046..=26047 - | 26055..=26056 - | 26058..=26059 - | 26346..=26347 - | 26349..=26350 - | 26358..=26359 - | 26361..=26362 - | 26454..=26455 - | 26457..=26458 - | 26466..=26467 - | 26469..=26470 => &SHAPE158, + | 25121..=25122 + | 25124..=25125 + | 25133..=25134 + | 25136..=25137 + | 25229..=25230 + | 25232..=25233 + | 25241..=25242 + | 25244..=25245 + | 25532..=25533 + | 25535..=25536 + | 25544..=25545 + | 25547..=25548 + | 25640..=25641 + | 25643..=25644 + | 25652..=25653 + | 25655..=25656 + | 25943..=25944 + | 25946..=25947 + | 25955..=25956 + | 25958..=25959 + | 26051..=26052 + | 26054..=26055 + | 26063..=26064 + | 26066..=26067 + | 26354..=26355 + | 26357..=26358 + | 26366..=26367 + | 26369..=26370 + | 26462..=26463 + | 26465..=26466 + | 26474..=26475 + | 26477..=26478 => &SHAPE158, 8063 | 8066 | 8099 | 8102 | 8171 | 8174 | 8207 | 8210 | 8387 | 8390 | 8423 | 8426 | 8495 | 8498 | 8531 | 8534 | 14304 | 14307 | 14340 | 14343 | 14412 | 14415 | 14448 | 14451 | 14628 | 14631 | 14664 | 14667 | 14736 | 14739 | 14772 | 14775 | 14952 @@ -7297,10 +7297,10 @@ impl BlockWithShape for BlockState { | 20216 | 20249 | 20252 | 20542 | 20545 | 20578 | 20581 | 20650 | 20653 | 20686 | 20689 | 21312 | 21315 | 21348 | 21351 | 21420 | 21423 | 21456 | 21459 | 21723 | 21726 | 21759 | 21762 | 21831 | 21834 | 21867 | 21870 | 22135 | 22138 | 22171 - | 22174 | 22243 | 22246 | 22279 | 22282 | 25130 | 25133 | 25166 | 25169 | 25238 - | 25241 | 25274 | 25277 | 25541 | 25544 | 25577 | 25580 | 25649 | 25652 | 25685 - | 25688 | 25952 | 25955 | 25988 | 25991 | 26060 | 26063 | 26096 | 26099 | 26363 - | 26366 | 26399 | 26402 | 26471 | 26474 | 26507 | 26510 => &SHAPE159, + | 22174 | 22243 | 22246 | 22279 | 22282 | 25138 | 25141 | 25174 | 25177 | 25246 + | 25249 | 25282 | 25285 | 25549 | 25552 | 25585 | 25588 | 25657 | 25660 | 25693 + | 25696 | 25960 | 25963 | 25996 | 25999 | 26068 | 26071 | 26104 | 26107 | 26371 + | 26374 | 26407 | 26410 | 26479 | 26482 | 26515 | 26518 => &SHAPE159, 8064..=8065 | 8067..=8068 | 8100..=8101 @@ -7469,38 +7469,38 @@ impl BlockWithShape for BlockState { | 22247..=22248 | 22280..=22281 | 22283..=22284 - | 25131..=25132 - | 25134..=25135 - | 25167..=25168 - | 25170..=25171 - | 25239..=25240 - | 25242..=25243 - | 25275..=25276 - | 25278..=25279 - | 25542..=25543 - | 25545..=25546 - | 25578..=25579 - | 25581..=25582 - | 25650..=25651 - | 25653..=25654 - | 25686..=25687 - | 25689..=25690 - | 25953..=25954 - | 25956..=25957 - | 25989..=25990 - | 25992..=25993 - | 26061..=26062 - | 26064..=26065 - | 26097..=26098 - | 26100..=26101 - | 26364..=26365 - | 26367..=26368 - | 26400..=26401 - | 26403..=26404 - | 26472..=26473 - | 26475..=26476 - | 26508..=26509 - | 26511..=26512 => &SHAPE160, + | 25139..=25140 + | 25142..=25143 + | 25175..=25176 + | 25178..=25179 + | 25247..=25248 + | 25250..=25251 + | 25283..=25284 + | 25286..=25287 + | 25550..=25551 + | 25553..=25554 + | 25586..=25587 + | 25589..=25590 + | 25658..=25659 + | 25661..=25662 + | 25694..=25695 + | 25697..=25698 + | 25961..=25962 + | 25964..=25965 + | 25997..=25998 + | 26000..=26001 + | 26069..=26070 + | 26072..=26073 + | 26105..=26106 + | 26108..=26109 + | 26372..=26373 + | 26375..=26376 + | 26408..=26409 + | 26411..=26412 + | 26480..=26481 + | 26483..=26484 + | 26516..=26517 + | 26519..=26520 => &SHAPE160, 8069 | 8072 | 8105 | 8108 | 8177 | 8180 | 8213 | 8216 | 8393 | 8396 | 8429 | 8432 | 8501 | 8504 | 8537 | 8540 | 14310 | 14313 | 14346 | 14349 | 14418 | 14421 | 14454 | 14457 | 14634 | 14637 | 14670 | 14673 | 14742 | 14745 | 14778 | 14781 | 14958 @@ -7517,10 +7517,10 @@ impl BlockWithShape for BlockState { | 20222 | 20255 | 20258 | 20548 | 20551 | 20584 | 20587 | 20656 | 20659 | 20692 | 20695 | 21318 | 21321 | 21354 | 21357 | 21426 | 21429 | 21462 | 21465 | 21729 | 21732 | 21765 | 21768 | 21837 | 21840 | 21873 | 21876 | 22141 | 22144 | 22177 - | 22180 | 22249 | 22252 | 22285 | 22288 | 25136 | 25139 | 25172 | 25175 | 25244 - | 25247 | 25280 | 25283 | 25547 | 25550 | 25583 | 25586 | 25655 | 25658 | 25691 - | 25694 | 25958 | 25961 | 25994 | 25997 | 26066 | 26069 | 26102 | 26105 | 26369 - | 26372 | 26405 | 26408 | 26477 | 26480 | 26513 | 26516 => &SHAPE161, + | 22180 | 22249 | 22252 | 22285 | 22288 | 25144 | 25147 | 25180 | 25183 | 25252 + | 25255 | 25288 | 25291 | 25555 | 25558 | 25591 | 25594 | 25663 | 25666 | 25699 + | 25702 | 25966 | 25969 | 26002 | 26005 | 26074 | 26077 | 26110 | 26113 | 26377 + | 26380 | 26413 | 26416 | 26485 | 26488 | 26521 | 26524 => &SHAPE161, 8070..=8071 | 8073..=8074 | 8106..=8107 @@ -7689,38 +7689,38 @@ impl BlockWithShape for BlockState { | 22253..=22254 | 22286..=22287 | 22289..=22290 - | 25137..=25138 - | 25140..=25141 - | 25173..=25174 - | 25176..=25177 - | 25245..=25246 - | 25248..=25249 - | 25281..=25282 - | 25284..=25285 - | 25548..=25549 - | 25551..=25552 - | 25584..=25585 - | 25587..=25588 - | 25656..=25657 - | 25659..=25660 - | 25692..=25693 - | 25695..=25696 - | 25959..=25960 - | 25962..=25963 - | 25995..=25996 - | 25998..=25999 - | 26067..=26068 - | 26070..=26071 - | 26103..=26104 - | 26106..=26107 - | 26370..=26371 - | 26373..=26374 - | 26406..=26407 - | 26409..=26410 - | 26478..=26479 - | 26481..=26482 - | 26514..=26515 - | 26517..=26518 => &SHAPE162, + | 25145..=25146 + | 25148..=25149 + | 25181..=25182 + | 25184..=25185 + | 25253..=25254 + | 25256..=25257 + | 25289..=25290 + | 25292..=25293 + | 25556..=25557 + | 25559..=25560 + | 25592..=25593 + | 25595..=25596 + | 25664..=25665 + | 25667..=25668 + | 25700..=25701 + | 25703..=25704 + | 25967..=25968 + | 25970..=25971 + | 26003..=26004 + | 26006..=26007 + | 26075..=26076 + | 26078..=26079 + | 26111..=26112 + | 26114..=26115 + | 26378..=26379 + | 26381..=26382 + | 26414..=26415 + | 26417..=26418 + | 26486..=26487 + | 26489..=26490 + | 26522..=26523 + | 26525..=26526 => &SHAPE162, 8075 | 8078 | 8087 | 8090 | 8111 | 8114 | 8123 | 8126 | 8183 | 8186 | 8195 | 8198 | 8219 | 8222 | 8231 | 8234 | 8399 | 8402 | 8411 | 8414 | 8435 | 8438 | 8447 | 8450 | 8507 | 8510 | 8519 | 8522 | 8543 | 8546 | 8555 | 8558 | 14316 | 14319 | 14328 @@ -7754,13 +7754,13 @@ impl BlockWithShape for BlockState { | 21738 | 21747 | 21750 | 21771 | 21774 | 21783 | 21786 | 21843 | 21846 | 21855 | 21858 | 21879 | 21882 | 21891 | 21894 | 22147 | 22150 | 22159 | 22162 | 22183 | 22186 | 22195 | 22198 | 22255 | 22258 | 22267 | 22270 | 22291 | 22294 | 22303 - | 22306 | 25142 | 25145 | 25154 | 25157 | 25178 | 25181 | 25190 | 25193 | 25250 - | 25253 | 25262 | 25265 | 25286 | 25289 | 25298 | 25301 | 25553 | 25556 | 25565 - | 25568 | 25589 | 25592 | 25601 | 25604 | 25661 | 25664 | 25673 | 25676 | 25697 - | 25700 | 25709 | 25712 | 25964 | 25967 | 25976 | 25979 | 26000 | 26003 | 26012 - | 26015 | 26072 | 26075 | 26084 | 26087 | 26108 | 26111 | 26120 | 26123 | 26375 - | 26378 | 26387 | 26390 | 26411 | 26414 | 26423 | 26426 | 26483 | 26486 | 26495 - | 26498 | 26519 | 26522 | 26531 | 26534 => &SHAPE163, + | 22306 | 25150 | 25153 | 25162 | 25165 | 25186 | 25189 | 25198 | 25201 | 25258 + | 25261 | 25270 | 25273 | 25294 | 25297 | 25306 | 25309 | 25561 | 25564 | 25573 + | 25576 | 25597 | 25600 | 25609 | 25612 | 25669 | 25672 | 25681 | 25684 | 25705 + | 25708 | 25717 | 25720 | 25972 | 25975 | 25984 | 25987 | 26008 | 26011 | 26020 + | 26023 | 26080 | 26083 | 26092 | 26095 | 26116 | 26119 | 26128 | 26131 | 26383 + | 26386 | 26395 | 26398 | 26419 | 26422 | 26431 | 26434 | 26491 | 26494 | 26503 + | 26506 | 26527 | 26530 | 26539 | 26542 => &SHAPE163, 8076..=8077 | 8079..=8080 | 8088..=8089 @@ -8097,70 +8097,70 @@ impl BlockWithShape for BlockState { | 22295..=22296 | 22304..=22305 | 22307..=22308 - | 25143..=25144 - | 25146..=25147 - | 25155..=25156 - | 25158..=25159 - | 25179..=25180 - | 25182..=25183 - | 25191..=25192 - | 25194..=25195 - | 25251..=25252 - | 25254..=25255 - | 25263..=25264 - | 25266..=25267 - | 25287..=25288 - | 25290..=25291 - | 25299..=25300 - | 25302..=25303 - | 25554..=25555 - | 25557..=25558 - | 25566..=25567 - | 25569..=25570 - | 25590..=25591 - | 25593..=25594 - | 25602..=25603 - | 25605..=25606 - | 25662..=25663 - | 25665..=25666 - | 25674..=25675 - | 25677..=25678 - | 25698..=25699 - | 25701..=25702 - | 25710..=25711 - | 25713..=25714 - | 25965..=25966 - | 25968..=25969 - | 25977..=25978 - | 25980..=25981 - | 26001..=26002 - | 26004..=26005 - | 26013..=26014 - | 26016..=26017 - | 26073..=26074 - | 26076..=26077 - | 26085..=26086 - | 26088..=26089 - | 26109..=26110 - | 26112..=26113 - | 26121..=26122 - | 26124..=26125 - | 26376..=26377 - | 26379..=26380 - | 26388..=26389 - | 26391..=26392 - | 26412..=26413 - | 26415..=26416 - | 26424..=26425 - | 26427..=26428 - | 26484..=26485 - | 26487..=26488 - | 26496..=26497 - | 26499..=26500 - | 26520..=26521 - | 26523..=26524 - | 26532..=26533 - | 26535..=26536 => &SHAPE164, + | 25151..=25152 + | 25154..=25155 + | 25163..=25164 + | 25166..=25167 + | 25187..=25188 + | 25190..=25191 + | 25199..=25200 + | 25202..=25203 + | 25259..=25260 + | 25262..=25263 + | 25271..=25272 + | 25274..=25275 + | 25295..=25296 + | 25298..=25299 + | 25307..=25308 + | 25310..=25311 + | 25562..=25563 + | 25565..=25566 + | 25574..=25575 + | 25577..=25578 + | 25598..=25599 + | 25601..=25602 + | 25610..=25611 + | 25613..=25614 + | 25670..=25671 + | 25673..=25674 + | 25682..=25683 + | 25685..=25686 + | 25706..=25707 + | 25709..=25710 + | 25718..=25719 + | 25721..=25722 + | 25973..=25974 + | 25976..=25977 + | 25985..=25986 + | 25988..=25989 + | 26009..=26010 + | 26012..=26013 + | 26021..=26022 + | 26024..=26025 + | 26081..=26082 + | 26084..=26085 + | 26093..=26094 + | 26096..=26097 + | 26117..=26118 + | 26120..=26121 + | 26129..=26130 + | 26132..=26133 + | 26384..=26385 + | 26387..=26388 + | 26396..=26397 + | 26399..=26400 + | 26420..=26421 + | 26423..=26424 + | 26432..=26433 + | 26435..=26436 + | 26492..=26493 + | 26495..=26496 + | 26504..=26505 + | 26507..=26508 + | 26528..=26529 + | 26531..=26532 + | 26540..=26541 + | 26543..=26544 => &SHAPE164, 8081 | 8084 | 8093 | 8096 | 8117 | 8120 | 8129 | 8132 | 8189 | 8192 | 8201 | 8204 | 8225 | 8228 | 8237 | 8240 | 8405 | 8408 | 8417 | 8420 | 8441 | 8444 | 8453 | 8456 | 8513 | 8516 | 8525 | 8528 | 8549 | 8552 | 8561 | 8564 | 14322 | 14325 | 14334 @@ -8194,13 +8194,13 @@ impl BlockWithShape for BlockState { | 21744 | 21753 | 21756 | 21777 | 21780 | 21789 | 21792 | 21849 | 21852 | 21861 | 21864 | 21885 | 21888 | 21897 | 21900 | 22153 | 22156 | 22165 | 22168 | 22189 | 22192 | 22201 | 22204 | 22261 | 22264 | 22273 | 22276 | 22297 | 22300 | 22309 - | 22312 | 25148 | 25151 | 25160 | 25163 | 25184 | 25187 | 25196 | 25199 | 25256 - | 25259 | 25268 | 25271 | 25292 | 25295 | 25304 | 25307 | 25559 | 25562 | 25571 - | 25574 | 25595 | 25598 | 25607 | 25610 | 25667 | 25670 | 25679 | 25682 | 25703 - | 25706 | 25715 | 25718 | 25970 | 25973 | 25982 | 25985 | 26006 | 26009 | 26018 - | 26021 | 26078 | 26081 | 26090 | 26093 | 26114 | 26117 | 26126 | 26129 | 26381 - | 26384 | 26393 | 26396 | 26417 | 26420 | 26429 | 26432 | 26489 | 26492 | 26501 - | 26504 | 26525 | 26528 | 26537 | 26540 => &SHAPE165, + | 22312 | 25156 | 25159 | 25168 | 25171 | 25192 | 25195 | 25204 | 25207 | 25264 + | 25267 | 25276 | 25279 | 25300 | 25303 | 25312 | 25315 | 25567 | 25570 | 25579 + | 25582 | 25603 | 25606 | 25615 | 25618 | 25675 | 25678 | 25687 | 25690 | 25711 + | 25714 | 25723 | 25726 | 25978 | 25981 | 25990 | 25993 | 26014 | 26017 | 26026 + | 26029 | 26086 | 26089 | 26098 | 26101 | 26122 | 26125 | 26134 | 26137 | 26389 + | 26392 | 26401 | 26404 | 26425 | 26428 | 26437 | 26440 | 26497 | 26500 | 26509 + | 26512 | 26533 | 26536 | 26545 | 26548 => &SHAPE165, 8082..=8083 | 8085..=8086 | 8094..=8095 @@ -8537,71 +8537,71 @@ impl BlockWithShape for BlockState { | 22301..=22302 | 22310..=22311 | 22313..=22314 - | 25149..=25150 - | 25152..=25153 - | 25161..=25162 - | 25164..=25165 - | 25185..=25186 - | 25188..=25189 - | 25197..=25198 - | 25200..=25201 - | 25257..=25258 - | 25260..=25261 - | 25269..=25270 - | 25272..=25273 - | 25293..=25294 - | 25296..=25297 - | 25305..=25306 - | 25308..=25309 - | 25560..=25561 - | 25563..=25564 - | 25572..=25573 - | 25575..=25576 - | 25596..=25597 - | 25599..=25600 - | 25608..=25609 - | 25611..=25612 - | 25668..=25669 - | 25671..=25672 - | 25680..=25681 - | 25683..=25684 - | 25704..=25705 - | 25707..=25708 - | 25716..=25717 - | 25719..=25720 - | 25971..=25972 - | 25974..=25975 - | 25983..=25984 - | 25986..=25987 - | 26007..=26008 - | 26010..=26011 - | 26019..=26020 - | 26022..=26023 - | 26079..=26080 - | 26082..=26083 - | 26091..=26092 - | 26094..=26095 - | 26115..=26116 - | 26118..=26119 - | 26127..=26128 - | 26130..=26131 - | 26382..=26383 - | 26385..=26386 - | 26394..=26395 - | 26397..=26398 - | 26418..=26419 - | 26421..=26422 - | 26430..=26431 - | 26433..=26434 - | 26490..=26491 - | 26493..=26494 - | 26502..=26503 - | 26505..=26506 - | 26526..=26527 - | 26529..=26530 - | 26538..=26539 - | 26541..=26542 => &SHAPE166, - 8567..=8594 | 12957 | 19455..=19458 | 26553..=26554 => &SHAPE27, + | 25157..=25158 + | 25160..=25161 + | 25169..=25170 + | 25172..=25173 + | 25193..=25194 + | 25196..=25197 + | 25205..=25206 + | 25208..=25209 + | 25265..=25266 + | 25268..=25269 + | 25277..=25278 + | 25280..=25281 + | 25301..=25302 + | 25304..=25305 + | 25313..=25314 + | 25316..=25317 + | 25568..=25569 + | 25571..=25572 + | 25580..=25581 + | 25583..=25584 + | 25604..=25605 + | 25607..=25608 + | 25616..=25617 + | 25619..=25620 + | 25676..=25677 + | 25679..=25680 + | 25688..=25689 + | 25691..=25692 + | 25712..=25713 + | 25715..=25716 + | 25724..=25725 + | 25727..=25728 + | 25979..=25980 + | 25982..=25983 + | 25991..=25992 + | 25994..=25995 + | 26015..=26016 + | 26018..=26019 + | 26027..=26028 + | 26030..=26031 + | 26087..=26088 + | 26090..=26091 + | 26099..=26100 + | 26102..=26103 + | 26123..=26124 + | 26126..=26127 + | 26135..=26136 + | 26138..=26139 + | 26390..=26391 + | 26393..=26394 + | 26402..=26403 + | 26405..=26406 + | 26426..=26427 + | 26429..=26430 + | 26438..=26439 + | 26441..=26442 + | 26498..=26499 + | 26501..=26502 + | 26510..=26511 + | 26513..=26514 + | 26534..=26535 + | 26537..=26538 + | 26546..=26547 + | 26549..=26550 => &SHAPE166, + 8567..=8594 | 12957 | 19455..=19458 | 26561..=26562 => &SHAPE27, 8827..=8858 | 8867..=8898 | 8907..=8938 | 8947..=8978 | 8987..=9018 | 9027..=9058 => { &SHAPE169 } @@ -8685,14 +8685,14 @@ impl BlockWithShape for BlockState { | 23634..=23635 | 23640..=23641 | 23646..=23647 - | 24980..=24981 - | 25391..=25392 - | 25802..=25803 - | 26213..=26214 => &SHAPE186, - 10728..=10743 | 24818 => &SHAPE28, - 12334 | 12336 | 24716..=24719 | 24724..=24727 => &SHAPE187, - 12335 | 12337 | 24720..=24723 | 24728..=24731 => &SHAPE188, - 12338..=12339 | 24732..=24739 => &SHAPE90, + | 24988..=24989 + | 25399..=25400 + | 25810..=25811 + | 26221..=26222 => &SHAPE186, + 10728..=10743 | 24826 => &SHAPE28, + 12334 | 12336 | 24724..=24727 | 24732..=24735 => &SHAPE187, + 12335 | 12337 | 24728..=24731 | 24736..=24739 => &SHAPE188, + 12338..=12339 | 24740..=24747 => &SHAPE90, 12340 => &SHAPE189, 12341 => &SHAPE190, 12342 => &SHAPE191, @@ -8722,7 +8722,7 @@ impl BlockWithShape for BlockState { 12366 => &SHAPE215, 12367 => &SHAPE216, 12368 => &SHAPE217, - 12369 | 24752..=24755 => &SHAPE68, + 12369 | 24760..=24763 => &SHAPE68, 12370 => &SHAPE218, 12371 => &SHAPE219, 12372 => &SHAPE220, @@ -8884,23 +8884,23 @@ impl BlockWithShape for BlockState { 21075..=21076 => &SHAPE310, 21077..=21078 => &SHAPE311, 21079..=21080 => &SHAPE312, - 24740..=24743 => &SHAPE262, - 24744..=24745 => &SHAPE313, - 24746..=24747 => &SHAPE314, - 24748..=24751 => &SHAPE63, - 24756..=24759 => &SHAPE73, - 24816..=24817 => &SHAPE315, - 24836..=24839 | 24844..=24847 | 24852..=24855 | 24860..=24863 => &SHAPE316, - 24840..=24841 | 24848..=24849 | 24856..=24857 | 24864..=24865 => &SHAPE317, + 24748..=24751 => &SHAPE262, + 24752..=24753 => &SHAPE313, + 24754..=24755 => &SHAPE314, + 24756..=24759 => &SHAPE63, + 24764..=24767 => &SHAPE73, + 24824..=24825 => &SHAPE315, + 24844..=24847 | 24852..=24855 | 24860..=24863 | 24868..=24871 => &SHAPE316, + 24848..=24849 | 24856..=24857 | 24864..=24865 | 24872..=24873 => &SHAPE317, _ => &SHAPE1, } } fn is_shape_empty(&self) -> bool { - matches!(self.id, 0|25..=78|80..=111|1944..=1991|2004..=2010|2063..=2090|2355..=2872|2978..=4273|4278..=4285|4302..=4589|4662..=4681|4762..=5537|5626..=5651|5716..=5733|5738..=5772|5799..=5814|5858..=5862|5864..=5865|6813..=6998|7001..=7002|7005..=7006|7009..=7010|7013..=7014|7017..=7018|7021..=7022|7025..=7026|7385..=7388|7406|7521..=7664|7925|7928|8249|8252|8595..=8826|9143..=9174|9320..=9343|10367..=10398|10747..=11078|11310..=11311|11314..=11315|11318..=11319|11322..=11323|11326..=11327|11330..=11331|11334..=11335|11338..=11339|11342..=11343|11346..=11347|11350..=11351|11354..=11355|11358..=11359|11362..=11363|11366..=11367|11370..=11371|11374..=11375|11378..=11379|11382..=11383|11386..=11387|11390..=11391|11394..=11395|11398..=11399|11402..=11403|11406..=11407|11410..=11411|11414..=11415|11418..=11419|11422..=11423|11426..=11427|11430..=11431|11434..=11435|11438..=11439|11442..=11443|11446..=11447|11450..=11451|11454..=11455|11458..=11459|11462..=11463|11466..=11467|11470..=11471|11474..=11475|11478..=11479|11482..=11483|11486..=11487|11490..=11491|11494..=11495|11498..=11499|11502..=11503|11506..=11507|11510..=11511|11514..=11515|11518..=11519|11522..=11523|11526..=11527|11530..=11531|11534..=11535|11538..=11539|11542..=11543|11546..=11547|11550..=11551|11554..=11555|11558..=11559|11562..=11563|12495..=12496|12499|12501|12503|12505|12507..=12512|12514|12549|12760..=12786|12813..=12932|12944|12958..=12961|14166|14169|14490|14493|14814|14817|15138|15141|15462|15465|15786|15789|16110|16113|16434|16437|16758|16761|17082|17085|17406|17409|17730|17733|18054|18057|18575..=18578|18592|18594..=18595|18609|18611..=18665|18680..=18683|18876..=18877|18880..=18881|18884..=18885|18888..=18889|18892..=18893|18896..=18897|18900..=18901|18904..=18905|18908..=18909|18912..=18913|18916..=18917|18920..=18921|18924..=18925|18928..=18929|18932..=18933|18936..=18937|19100..=19147|19276..=19355|19547|19550|19967|19970|20372..=20397|20404|20407|21174|21177|21585|21588|21997|22000|22318|22800..=22927|24761..=24815|24819..=24834|24842..=24843|24850..=24851|24858..=24859|24866..=24893|24992|24995|25403|25406|25814|25817|26225|26228|26564) + matches!(self.id, 0|25..=78|80..=111|1944..=1991|2004..=2010|2063..=2090|2355..=2872|2978..=4273|4278..=4285|4302..=4589|4662..=4681|4762..=5537|5626..=5651|5716..=5733|5738..=5772|5799..=5814|5858..=5862|5864..=5865|6813..=6998|7001..=7002|7005..=7006|7009..=7010|7013..=7014|7017..=7018|7021..=7022|7025..=7026|7385..=7388|7406|7521..=7664|7925|7928|8249|8252|8595..=8826|9143..=9174|9320..=9343|10367..=10398|10747..=11078|11310..=11311|11314..=11315|11318..=11319|11322..=11323|11326..=11327|11330..=11331|11334..=11335|11338..=11339|11342..=11343|11346..=11347|11350..=11351|11354..=11355|11358..=11359|11362..=11363|11366..=11367|11370..=11371|11374..=11375|11378..=11379|11382..=11383|11386..=11387|11390..=11391|11394..=11395|11398..=11399|11402..=11403|11406..=11407|11410..=11411|11414..=11415|11418..=11419|11422..=11423|11426..=11427|11430..=11431|11434..=11435|11438..=11439|11442..=11443|11446..=11447|11450..=11451|11454..=11455|11458..=11459|11462..=11463|11466..=11467|11470..=11471|11474..=11475|11478..=11479|11482..=11483|11486..=11487|11490..=11491|11494..=11495|11498..=11499|11502..=11503|11506..=11507|11510..=11511|11514..=11515|11518..=11519|11522..=11523|11526..=11527|11530..=11531|11534..=11535|11538..=11539|11542..=11543|11546..=11547|11550..=11551|11554..=11555|11558..=11559|11562..=11563|12495..=12496|12499|12501|12503|12505|12507..=12512|12514|12549|12760..=12786|12813..=12932|12944|12958..=12961|14166|14169|14490|14493|14814|14817|15138|15141|15462|15465|15786|15789|16110|16113|16434|16437|16758|16761|17082|17085|17406|17409|17730|17733|18054|18057|18575..=18578|18592|18594..=18595|18609|18611..=18665|18680..=18683|18876..=18877|18880..=18881|18884..=18885|18888..=18889|18892..=18893|18896..=18897|18900..=18901|18904..=18905|18908..=18909|18912..=18913|18916..=18917|18920..=18921|18924..=18925|18928..=18929|18932..=18933|18936..=18937|19100..=19147|19276..=19355|19547|19550|19967|19970|20372..=20397|20404|20407|21174|21177|21585|21588|21997|22000|22318|22800..=22927|24769..=24823|24827..=24842|24850..=24851|24858..=24859|24866..=24867|24874..=24901|25000|25003|25411|25414|25822|25825|26233|26236|26572) } fn is_shape_full(&self) -> bool { - matches!(self.id, 1..=24|79|112..=1687|1998..=2003|2017..=2022|2047..=2062|2091..=2354|2873|4274..=4277|4294..=4301|5734..=5737|5780..=5781|5798|5815..=5816|5849|5851..=5857|5863|5866..=5873|5945..=5960|6537..=6740|6811..=6812|7269..=7270|7272|7415|7417..=7418|7511..=7512|7665|7906..=7918|9223..=9224|9235..=9239|9344..=9371|10364..=10366|10463..=10465|10710..=10711|10716..=10717|10722..=10727|10744..=10746|11079..=11081|11166..=11167|11172..=11173|11178..=11179|11184..=11185|11190..=11191|11196..=11197|11202..=11203|11208..=11209|11214..=11215|11220..=11221|11226..=11227|11232..=11233|11238..=11239|11244..=11245|11250..=11251|11256..=11257|11262..=11263|11268..=11269|11274..=11275|11280..=11281|11286..=11287|11292..=11293|11298..=11299|11304..=11309|12404..=12413|12494|12515..=12548|12550..=12759|12787|12803..=12812|12941|14086..=14087|14092..=14093|14098..=14099|14104..=14105|14110..=14111|14116..=14117|14122..=14123|14128..=14129|14134..=14135|14140..=14141|14146..=14147|14152..=14153|14158..=14159|18404..=18437|18466|18579..=18591|18593|18596..=18608|18610|18666..=18667|18672..=18673|18678..=18679|19356..=19371|19381..=19444|19446..=19454|19459..=19460|19869..=19874|19879..=19880|20285|20370..=20371|20722..=20724|21031..=21032|21081|21086..=21087|21492|21497..=21498|21903..=21904|21909..=21910|22315..=22317|22799|22928..=22929|22938..=22955|23280..=23281|23286..=23287|23292..=23293|23298..=23307|23632..=23633|23638..=23639|23644..=23645|23650..=23651|24676..=24715|24760|24835|24894|24896..=24899|24984..=24985|25310|25395..=25396|25721|25806..=25807|26132|26217..=26218|26543..=26552|26555..=26563|26565|26582..=26635) + matches!(self.id, 1..=24|79|112..=1687|1998..=2003|2017..=2022|2047..=2062|2091..=2354|2873|4274..=4277|4294..=4301|5734..=5737|5780..=5781|5798|5815..=5816|5849|5851..=5857|5863|5866..=5873|5945..=5960|6537..=6740|6811..=6812|7269..=7270|7272|7415|7417..=7418|7511..=7512|7665|7906..=7918|9223..=9224|9235..=9239|9344..=9371|10364..=10366|10463..=10465|10710..=10711|10716..=10717|10722..=10727|10744..=10746|11079..=11081|11166..=11167|11172..=11173|11178..=11179|11184..=11185|11190..=11191|11196..=11197|11202..=11203|11208..=11209|11214..=11215|11220..=11221|11226..=11227|11232..=11233|11238..=11239|11244..=11245|11250..=11251|11256..=11257|11262..=11263|11268..=11269|11274..=11275|11280..=11281|11286..=11287|11292..=11293|11298..=11299|11304..=11309|12404..=12413|12494|12515..=12548|12550..=12759|12787|12803..=12812|12941|14086..=14087|14092..=14093|14098..=14099|14104..=14105|14110..=14111|14116..=14117|14122..=14123|14128..=14129|14134..=14135|14140..=14141|14146..=14147|14152..=14153|14158..=14159|18404..=18437|18466|18579..=18591|18593|18596..=18608|18610|18666..=18667|18672..=18673|18678..=18679|19356..=19371|19381..=19444|19446..=19454|19459..=19460|19869..=19874|19879..=19880|20285|20370..=20371|20722..=20724|21031..=21032|21081|21086..=21087|21492|21497..=21498|21903..=21904|21909..=21910|22315..=22317|22799|22928..=22929|22938..=22955|23280..=23281|23286..=23287|23292..=23293|23298..=23307|23632..=23633|23638..=23639|23644..=23645|23650..=23651|24676..=24723|24768|24843|24902|24904..=24907|24992..=24993|25318|25403..=25404|25729|25814..=25815|26140|26225..=26226|26551..=26560|26563..=26571|26573|26590..=26643) } } diff --git a/azalea-protocol/Cargo.toml b/azalea-protocol/Cargo.toml index 4c849573c..41b768393 100644 --- a/azalea-protocol/Cargo.toml +++ b/azalea-protocol/Cargo.toml @@ -20,7 +20,9 @@ azalea-brigadier = { path = "../azalea-brigadier", version = "^0.8.0", features "azalea-buf", ] } azalea-buf = { path = "../azalea-buf", version = "0.8.0" } -azalea-chat = { path = "../azalea-chat", version = "0.8.0" } +azalea-chat = { path = "../azalea-chat", version = "0.8.0", features = [ + "numbers", +] } azalea-core = { path = "../azalea-core", optional = true, version = "^0.8.0", features = [ "serde", ] } diff --git a/azalea-protocol/src/packets/configuration/clientbound_resource_pack_pop_packet.rs b/azalea-protocol/src/packets/configuration/clientbound_resource_pack_pop_packet.rs new file mode 100644 index 000000000..6533b589b --- /dev/null +++ b/azalea-protocol/src/packets/configuration/clientbound_resource_pack_pop_packet.rs @@ -0,0 +1,8 @@ +use azalea_buf::McBuf; +use azalea_protocol_macros::ClientboundConfigurationPacket; +use uuid::Uuid; + +#[derive(Clone, Debug, McBuf, ClientboundConfigurationPacket)] +pub struct ClientboundResourcePackPopPacket { + pub id: Option, +} diff --git a/azalea-protocol/src/packets/configuration/clientbound_resource_pack_push_packet.rs b/azalea-protocol/src/packets/configuration/clientbound_resource_pack_push_packet.rs new file mode 100644 index 000000000..798f5f98f --- /dev/null +++ b/azalea-protocol/src/packets/configuration/clientbound_resource_pack_push_packet.rs @@ -0,0 +1,13 @@ +use azalea_buf::McBuf; +use azalea_chat::FormattedText; +use azalea_protocol_macros::ClientboundConfigurationPacket; +use uuid::Uuid; + +#[derive(Clone, Debug, McBuf, ClientboundConfigurationPacket)] +pub struct ClientboundResourcePackPushPacket { + pub id: Uuid, + pub url: String, + pub hash: String, + pub required: bool, + pub prompt: Option, +} diff --git a/azalea-protocol/src/packets/configuration/mod.rs b/azalea-protocol/src/packets/configuration/mod.rs index 8244e90af..9516935f2 100755 --- a/azalea-protocol/src/packets/configuration/mod.rs +++ b/azalea-protocol/src/packets/configuration/mod.rs @@ -4,7 +4,8 @@ pub mod clientbound_finish_configuration_packet; pub mod clientbound_keep_alive_packet; pub mod clientbound_ping_packet; pub mod clientbound_registry_data_packet; -pub mod clientbound_resource_pack_packet; +pub mod clientbound_resource_pack_pop_packet; +pub mod clientbound_resource_pack_push_packet; pub mod clientbound_update_enabled_features_packet; pub mod clientbound_update_tags_packet; pub mod serverbound_client_information_packet; @@ -32,8 +33,9 @@ declare_state_packets!( 0x03: clientbound_keep_alive_packet::ClientboundKeepAlivePacket, 0x04: clientbound_ping_packet::ClientboundPingPacket, 0x05: clientbound_registry_data_packet::ClientboundRegistryDataPacket, - 0x06: clientbound_resource_pack_packet::ClientboundResourcePackPacket, - 0x07: clientbound_update_enabled_features_packet::ClientboundUpdateEnabledFeaturesPacket, - 0x08: clientbound_update_tags_packet::ClientboundUpdateTagsPacket, + 0x06: clientbound_resource_pack_pop_packet::ClientboundResourcePackPopPacket, + 0x07: clientbound_resource_pack_push_packet::ClientboundResourcePackPushPacket, + 0x08: clientbound_update_enabled_features_packet::ClientboundUpdateEnabledFeaturesPacket, + 0x09: clientbound_update_tags_packet::ClientboundUpdateTagsPacket, } ); diff --git a/azalea-protocol/src/packets/configuration/serverbound_resource_pack_packet.rs b/azalea-protocol/src/packets/configuration/serverbound_resource_pack_packet.rs index 111491150..6f35525e6 100644 --- a/azalea-protocol/src/packets/configuration/serverbound_resource_pack_packet.rs +++ b/azalea-protocol/src/packets/configuration/serverbound_resource_pack_packet.rs @@ -1,8 +1,10 @@ use azalea_buf::McBuf; use azalea_protocol_macros::ServerboundConfigurationPacket; +use uuid::Uuid; #[derive(Clone, Debug, McBuf, ServerboundConfigurationPacket)] pub struct ServerboundResourcePackPacket { + pub id: Uuid, pub action: Action, } @@ -12,4 +14,7 @@ pub enum Action { Declined = 1, FailedDownload = 2, Accepted = 3, + InvalidUrl = 4, + FailedReload = 5, + Discarded = 6, } diff --git a/azalea-protocol/src/packets/game/clientbound_commands_packet.rs b/azalea-protocol/src/packets/game/clientbound_commands_packet.rs index 0b14fbd12..1a0e8a2e3 100755 --- a/azalea-protocol/src/packets/game/clientbound_commands_packet.rs +++ b/azalea-protocol/src/packets/game/clientbound_commands_packet.rs @@ -112,6 +112,7 @@ pub enum BrigadierParser { ItemPredicate, Color, FormattedText, + Style, Message, NbtCompoundTag, NbtTag, diff --git a/azalea-protocol/src/packets/game/clientbound_player_chat_packet.rs b/azalea-protocol/src/packets/game/clientbound_player_chat_packet.rs index 6a80e1727..41a21def6 100644 --- a/azalea-protocol/src/packets/game/clientbound_player_chat_packet.rs +++ b/azalea-protocol/src/packets/game/clientbound_player_chat_packet.rs @@ -169,41 +169,3 @@ impl McBufWritable for PackedMessageSignature { Ok(()) } } - -#[cfg(test)] -mod tests { - use super::*; - use std::backtrace::Backtrace; - - // you can remove or update this test if it breaks because mojang changed the - // structure of the packet again - #[test] - fn test_player_chat_packet() { - let data: [u8; 295] = [ - 47, 247, 69, 164, 160, 108, 63, 217, 178, 34, 4, 161, 47, 115, 192, 126, 0, 0, 11, 72, - 101, 108, 108, 111, 32, 119, 111, 114, 108, 100, 0, 0, 1, 132, 209, 9, 72, 139, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 242, 1, 123, 34, 105, 110, 115, 101, 114, 116, 105, 111, - 110, 34, 58, 34, 98, 111, 116, 48, 34, 44, 34, 99, 108, 105, 99, 107, 69, 118, 101, - 110, 116, 34, 58, 123, 34, 97, 99, 116, 105, 111, 110, 34, 58, 34, 115, 117, 103, 103, - 101, 115, 116, 95, 99, 111, 109, 109, 97, 110, 100, 34, 44, 34, 118, 97, 108, 117, 101, - 34, 58, 34, 47, 116, 101, 108, 108, 32, 98, 111, 116, 48, 32, 34, 125, 44, 34, 104, - 111, 118, 101, 114, 69, 118, 101, 110, 116, 34, 58, 123, 34, 97, 99, 116, 105, 111, - 110, 34, 58, 34, 115, 104, 111, 119, 95, 101, 110, 116, 105, 116, 121, 34, 44, 34, 99, - 111, 110, 116, 101, 110, 116, 115, 34, 58, 123, 34, 116, 121, 112, 101, 34, 58, 34, - 109, 105, 110, 101, 99, 114, 97, 102, 116, 58, 112, 108, 97, 121, 101, 114, 34, 44, 34, - 105, 100, 34, 58, 34, 50, 102, 102, 55, 52, 53, 97, 52, 45, 97, 48, 54, 99, 45, 51, - 102, 100, 57, 45, 98, 50, 50, 50, 45, 48, 52, 97, 49, 50, 102, 55, 51, 99, 48, 55, 101, - 34, 44, 34, 110, 97, 109, 101, 34, 58, 123, 34, 116, 101, 120, 116, 34, 58, 34, 98, - 111, 116, 48, 34, 125, 125, 125, 44, 34, 116, 101, 120, 116, 34, 58, 34, 98, 111, 116, - 48, 34, 125, 0, - ]; - // just make sure it doesn't panic - if let Err(e) = ClientboundPlayerChatPacket::read_from(&mut Cursor::new(&data)) { - let default_backtrace = Backtrace::capture(); - let backtrace = std::error::request_ref::(&e).unwrap_or(&default_backtrace); - eprintln!("{e}\n{backtrace}"); - - panic!("failed to read player chat packet"); - } - } -} diff --git a/azalea-protocol/src/packets/game/clientbound_reset_score_packet.rs b/azalea-protocol/src/packets/game/clientbound_reset_score_packet.rs new file mode 100644 index 000000000..8b24bbdf2 --- /dev/null +++ b/azalea-protocol/src/packets/game/clientbound_reset_score_packet.rs @@ -0,0 +1,8 @@ +use azalea_buf::McBuf; +use azalea_protocol_macros::ClientboundGamePacket; + +#[derive(Clone, Debug, McBuf, ClientboundGamePacket)] +pub struct ClientboundResetScorePacket { + pub owner: String, + pub objective_name: Option, +} diff --git a/azalea-protocol/src/packets/game/clientbound_resource_pack_pop_packet.rs b/azalea-protocol/src/packets/game/clientbound_resource_pack_pop_packet.rs new file mode 100644 index 000000000..34836c852 --- /dev/null +++ b/azalea-protocol/src/packets/game/clientbound_resource_pack_pop_packet.rs @@ -0,0 +1,8 @@ +use azalea_buf::McBuf; +use azalea_protocol_macros::ClientboundGamePacket; +use uuid::Uuid; + +#[derive(Clone, Debug, McBuf, ClientboundGamePacket)] +pub struct ClientboundResourcePackPopPacket { + pub id: Option, +} diff --git a/azalea-protocol/src/packets/game/clientbound_resource_pack_push_packet.rs b/azalea-protocol/src/packets/game/clientbound_resource_pack_push_packet.rs new file mode 100644 index 000000000..1d5e00b1f --- /dev/null +++ b/azalea-protocol/src/packets/game/clientbound_resource_pack_push_packet.rs @@ -0,0 +1,13 @@ +use azalea_buf::McBuf; +use azalea_chat::FormattedText; +use azalea_protocol_macros::ClientboundGamePacket; +use uuid::Uuid; + +#[derive(Clone, Debug, McBuf, ClientboundGamePacket)] +pub struct ClientboundResourcePackPushPacket { + pub id: Uuid, + pub url: String, + pub hash: String, + pub required: bool, + pub prompt: Option, +} diff --git a/azalea-protocol/src/packets/game/clientbound_set_objective_packet.rs b/azalea-protocol/src/packets/game/clientbound_set_objective_packet.rs index 3809b5b62..a9481ad15 100755 --- a/azalea-protocol/src/packets/game/clientbound_set_objective_packet.rs +++ b/azalea-protocol/src/packets/game/clientbound_set_objective_packet.rs @@ -1,59 +1,82 @@ -use azalea_buf::{BufReadError, McBuf, McBufReadable, McBufWritable}; -use azalea_chat::FormattedText; -use azalea_protocol_macros::ClientboundGamePacket; use std::io::{Cursor, Write}; +use azalea_buf::{McBuf, McBufReadable, McBufWritable}; +use azalea_chat::{numbers::NumberFormat, FormattedText}; +use azalea_core::objectives::ObjectiveCriteria; +use azalea_protocol_macros::ClientboundGamePacket; + #[derive(Clone, Debug, McBuf, ClientboundGamePacket)] pub struct ClientboundSetObjectivePacket { pub objective_name: String, pub method: Method, } +#[derive(Clone, Copy, Debug, McBuf)] +pub enum MethodKind { + Add, + Remove, + Change, +} + #[derive(Clone, Debug)] pub enum Method { - Add(DisplayInfo), + Add { + display_name: FormattedText, + render_type: ObjectiveCriteria, + number_format: NumberFormat, + }, Remove, - Change(DisplayInfo), + Change { + display_name: FormattedText, + render_type: ObjectiveCriteria, + number_format: NumberFormat, + }, } impl McBufReadable for Method { - fn read_from(buf: &mut Cursor<&[u8]>) -> Result { - Ok(match u8::read_from(buf)? { - 0 => Method::Add(DisplayInfo::read_from(buf)?), - 1 => Method::Remove, - 2 => Method::Change(DisplayInfo::read_from(buf)?), - id => return Err(BufReadError::UnexpectedEnumVariant { id: i32::from(id) }), - }) + fn read_from(buf: &mut Cursor<&[u8]>) -> Result { + let kind = MethodKind::read_from(buf)?; + match kind { + MethodKind::Add => Ok(Method::Add { + display_name: FormattedText::read_from(buf)?, + render_type: ObjectiveCriteria::read_from(buf)?, + number_format: NumberFormat::read_from(buf)?, + }), + MethodKind::Remove => Ok(Method::Remove), + MethodKind::Change => Ok(Method::Change { + display_name: FormattedText::read_from(buf)?, + render_type: ObjectiveCriteria::read_from(buf)?, + number_format: NumberFormat::read_from(buf)?, + }), + } } } impl McBufWritable for Method { fn write_into(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { match self { - Method::Add(info) => { - 0u8.write_into(buf)?; - info.write_into(buf)?; - } - Method::Remove => { - 1u8.write_into(buf)?; + Method::Add { + display_name, + render_type, + number_format, + } => { + MethodKind::Add.write_into(buf)?; + display_name.write_into(buf)?; + render_type.write_into(buf)?; + number_format.write_into(buf)?; } - Method::Change(info) => { - 2u8.write_into(buf)?; - info.write_into(buf)?; + Method::Remove => MethodKind::Remove.write_into(buf)?, + Method::Change { + display_name, + render_type, + number_format, + } => { + MethodKind::Change.write_into(buf)?; + display_name.write_into(buf)?; + render_type.write_into(buf)?; + number_format.write_into(buf)?; } } Ok(()) } } - -#[derive(McBuf, Clone, Debug)] -pub struct DisplayInfo { - pub display_name: FormattedText, - pub render_type: RenderType, -} - -#[derive(McBuf, Copy, Clone, Debug)] -pub enum RenderType { - Integer, - Hearts, -} diff --git a/azalea-protocol/src/packets/game/clientbound_set_score_packet.rs b/azalea-protocol/src/packets/game/clientbound_set_score_packet.rs index 56d14b942..6de53f749 100755 --- a/azalea-protocol/src/packets/game/clientbound_set_score_packet.rs +++ b/azalea-protocol/src/packets/game/clientbound_set_score_packet.rs @@ -1,61 +1,13 @@ -use azalea_buf::{BufReadError, McBufReadable, McBufVarReadable, McBufVarWritable, McBufWritable}; +use azalea_buf::McBuf; +use azalea_chat::{numbers::NumberFormat, FormattedText}; use azalea_protocol_macros::ClientboundGamePacket; -use std::{ - io::{Cursor, Write}, - ops::Not, -}; -#[derive(Clone, Debug, ClientboundGamePacket)] +#[derive(Clone, Debug, McBuf, ClientboundGamePacket)] pub struct ClientboundSetScorePacket { pub owner: String, - pub method: Method, - pub objective_name: Option, -} - -impl McBufReadable for ClientboundSetScorePacket { - fn read_from(buf: &mut Cursor<&[u8]>) -> Result { - let owner = String::read_from(buf)?; - let method_id = u32::var_read_from(buf)?; - let objective_name = String::read_from(buf)?; - let objective_name = objective_name.is_empty().not().then_some(objective_name); - // if it's change, read the score - let method = match method_id { - 0 => Method::Change { - score: u32::var_read_from(buf)?, - }, - 1 => Method::Remove, - id => return Err(BufReadError::UnexpectedEnumVariant { id: id as i32 }), - }; - Ok(ClientboundSetScorePacket { - owner, - method, - objective_name, - }) - } -} - -impl McBufWritable for ClientboundSetScorePacket { - fn write_into(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { - self.owner.write_into(buf)?; - match self.method { - Method::Change { .. } => 0u32, - Method::Remove => 1u32, - } - .var_write_into(buf)?; - // convert None to an empty string - self.objective_name - .as_ref() - .unwrap_or(&String::new()) - .write_into(buf)?; - if let Method::Change { score } = self.method { - score.var_write_into(buf)?; - } - Ok(()) - } -} - -#[derive(Clone, Copy, Debug)] -pub enum Method { - Change { score: u32 }, - Remove, + pub objective_name: String, + #[var] + pub score: u32, + pub display: Option, + pub number_format: Option, } diff --git a/azalea-protocol/src/packets/game/clientbound_update_recipes_packet.rs b/azalea-protocol/src/packets/game/clientbound_update_recipes_packet.rs index d8942387c..291cb580c 100755 --- a/azalea-protocol/src/packets/game/clientbound_update_recipes_packet.rs +++ b/azalea-protocol/src/packets/game/clientbound_update_recipes_packet.rs @@ -307,24 +307,26 @@ mod tests { let recipe = Recipe { identifier: ResourceLocation::new("minecraft:crafting_shaped"), data: RecipeData::CraftingShaped(ShapedRecipe { - width: 2, - height: 2, group: String::new(), category: CraftingBookCategory::Building, - ingredients: vec![ - Ingredient { - allowed: vec![ItemSlot::Empty], - }, - Ingredient { - allowed: vec![ItemSlot::Empty], - }, - Ingredient { - allowed: vec![ItemSlot::Empty], - }, - Ingredient { - allowed: vec![ItemSlot::Empty], - }, - ], + pattern: ShapedRecipePattern { + width: 2, + height: 2, + ingredients: vec![ + Ingredient { + allowed: vec![ItemSlot::Empty], + }, + Ingredient { + allowed: vec![ItemSlot::Empty], + }, + Ingredient { + allowed: vec![ItemSlot::Empty], + }, + Ingredient { + allowed: vec![ItemSlot::Empty], + }, + ], + }, result: ItemSlot::Empty, show_notification: false, }), diff --git a/azalea-protocol/src/packets/game/mod.rs b/azalea-protocol/src/packets/game/mod.rs index d5e7bdf3e..d45ea7b14 100755 --- a/azalea-protocol/src/packets/game/mod.rs +++ b/azalea-protocol/src/packets/game/mod.rs @@ -64,7 +64,9 @@ pub mod clientbound_pong_response_packet; pub mod clientbound_recipe_packet; pub mod clientbound_remove_entities_packet; pub mod clientbound_remove_mob_effect_packet; -pub mod clientbound_resource_pack_packet; +pub mod clientbound_reset_score_packet; +pub mod clientbound_resource_pack_pop_packet; +pub mod clientbound_resource_pack_push_packet; pub mod clientbound_respawn_packet; pub mod clientbound_rotate_head_packet; pub mod clientbound_section_blocks_update_packet; @@ -297,54 +299,56 @@ declare_state_packets!( 0x3f: clientbound_recipe_packet::ClientboundRecipePacket, 0x40: clientbound_remove_entities_packet::ClientboundRemoveEntitiesPacket, 0x41: clientbound_remove_mob_effect_packet::ClientboundRemoveMobEffectPacket, - 0x42: clientbound_resource_pack_packet::ClientboundResourcePackPacket, - 0x43: clientbound_respawn_packet::ClientboundRespawnPacket, - 0x44: clientbound_rotate_head_packet::ClientboundRotateHeadPacket, - 0x45: clientbound_section_blocks_update_packet::ClientboundSectionBlocksUpdatePacket, - 0x46: clientbound_select_advancements_tab_packet::ClientboundSelectAdvancementsTabPacket, - 0x47: clientbound_server_data_packet::ClientboundServerDataPacket, - 0x48: clientbound_set_action_bar_text_packet::ClientboundSetActionBarTextPacket, - 0x49: clientbound_set_border_center_packet::ClientboundSetBorderCenterPacket, - 0x4a: clientbound_set_border_lerp_size_packet::ClientboundSetBorderLerpSizePacket, - 0x4b: clientbound_set_border_size_packet::ClientboundSetBorderSizePacket, - 0x4c: clientbound_set_border_warning_delay_packet::ClientboundSetBorderWarningDelayPacket, - 0x4d: clientbound_set_border_warning_distance_packet::ClientboundSetBorderWarningDistancePacket, - 0x4e: clientbound_set_camera_packet::ClientboundSetCameraPacket, - 0x4f: clientbound_set_carried_item_packet::ClientboundSetCarriedItemPacket, - 0x50: clientbound_set_chunk_cache_center_packet::ClientboundSetChunkCacheCenterPacket, - 0x51: clientbound_set_chunk_cache_radius_packet::ClientboundSetChunkCacheRadiusPacket, - 0x52: clientbound_set_default_spawn_position_packet::ClientboundSetDefaultSpawnPositionPacket, - 0x53: clientbound_set_display_objective_packet::ClientboundSetDisplayObjectivePacket, - 0x54: clientbound_set_entity_data_packet::ClientboundSetEntityDataPacket, - 0x55: clientbound_set_entity_link_packet::ClientboundSetEntityLinkPacket, - 0x56: clientbound_set_entity_motion_packet::ClientboundSetEntityMotionPacket, - 0x57: clientbound_set_equipment_packet::ClientboundSetEquipmentPacket, - 0x58: clientbound_set_experience_packet::ClientboundSetExperiencePacket, - 0x59: clientbound_set_health_packet::ClientboundSetHealthPacket, - 0x5a: clientbound_set_objective_packet::ClientboundSetObjectivePacket, - 0x5b: clientbound_set_passengers_packet::ClientboundSetPassengersPacket, - 0x5c: clientbound_set_player_team_packet::ClientboundSetPlayerTeamPacket, - 0x5d: clientbound_set_score_packet::ClientboundSetScorePacket, - 0x5e: clientbound_set_simulation_distance_packet::ClientboundSetSimulationDistancePacket, - 0x5f: clientbound_set_subtitle_text_packet::ClientboundSetSubtitleTextPacket, - 0x60: clientbound_set_time_packet::ClientboundSetTimePacket, - 0x61: clientbound_set_title_text_packet::ClientboundSetTitleTextPacket, - 0x62: clientbound_set_titles_animation_packet::ClientboundSetTitlesAnimationPacket, - 0x63: clientbound_sound_entity_packet::ClientboundSoundEntityPacket, - 0x64: clientbound_sound_packet::ClientboundSoundPacket, - 0x65: clientbound_start_configuration_packet::ClientboundStartConfigurationPacket, - 0x66: clientbound_stop_sound_packet::ClientboundStopSoundPacket, - 0x67: clientbound_system_chat_packet::ClientboundSystemChatPacket, - 0x68: clientbound_tab_list_packet::ClientboundTabListPacket, - 0x69: clientbound_tag_query_packet::ClientboundTagQueryPacket, - 0x6a: clientbound_take_item_entity_packet::ClientboundTakeItemEntityPacket, - 0x6b: clientbound_teleport_entity_packet::ClientboundTeleportEntityPacket, - 0x6c: clientbound_ticking_state_packet::ClientboundTickingStatePacket, - 0x6d: clientbound_ticking_step_packet::ClientboundTickingStepPacket, - 0x6e: clientbound_update_advancements_packet::ClientboundUpdateAdvancementsPacket, - 0x6f: clientbound_update_attributes_packet::ClientboundUpdateAttributesPacket, - 0x70: clientbound_update_mob_effect_packet::ClientboundUpdateMobEffectPacket, - 0x71: clientbound_update_recipes_packet::ClientboundUpdateRecipesPacket, - 0x72: clientbound_update_tags_packet::ClientboundUpdateTagsPacket, + 0x42: clientbound_reset_score_packet::ClientboundResetScorePacket, + 0x43: clientbound_resource_pack_pop_packet::ClientboundResourcePackPopPacket, + 0x44: clientbound_resource_pack_push_packet::ClientboundResourcePackPushPacket, + 0x45: clientbound_respawn_packet::ClientboundRespawnPacket, + 0x46: clientbound_rotate_head_packet::ClientboundRotateHeadPacket, + 0x47: clientbound_section_blocks_update_packet::ClientboundSectionBlocksUpdatePacket, + 0x48: clientbound_select_advancements_tab_packet::ClientboundSelectAdvancementsTabPacket, + 0x49: clientbound_server_data_packet::ClientboundServerDataPacket, + 0x4a: clientbound_set_action_bar_text_packet::ClientboundSetActionBarTextPacket, + 0x4b: clientbound_set_border_center_packet::ClientboundSetBorderCenterPacket, + 0x4c: clientbound_set_border_lerp_size_packet::ClientboundSetBorderLerpSizePacket, + 0x4d: clientbound_set_border_size_packet::ClientboundSetBorderSizePacket, + 0x4e: clientbound_set_border_warning_delay_packet::ClientboundSetBorderWarningDelayPacket, + 0x4f: clientbound_set_border_warning_distance_packet::ClientboundSetBorderWarningDistancePacket, + 0x50: clientbound_set_camera_packet::ClientboundSetCameraPacket, + 0x51: clientbound_set_carried_item_packet::ClientboundSetCarriedItemPacket, + 0x52: clientbound_set_chunk_cache_center_packet::ClientboundSetChunkCacheCenterPacket, + 0x53: clientbound_set_chunk_cache_radius_packet::ClientboundSetChunkCacheRadiusPacket, + 0x54: clientbound_set_default_spawn_position_packet::ClientboundSetDefaultSpawnPositionPacket, + 0x55: clientbound_set_display_objective_packet::ClientboundSetDisplayObjectivePacket, + 0x56: clientbound_set_entity_data_packet::ClientboundSetEntityDataPacket, + 0x57: clientbound_set_entity_link_packet::ClientboundSetEntityLinkPacket, + 0x58: clientbound_set_entity_motion_packet::ClientboundSetEntityMotionPacket, + 0x59: clientbound_set_equipment_packet::ClientboundSetEquipmentPacket, + 0x5a: clientbound_set_experience_packet::ClientboundSetExperiencePacket, + 0x5b: clientbound_set_health_packet::ClientboundSetHealthPacket, + 0x5c: clientbound_set_objective_packet::ClientboundSetObjectivePacket, + 0x5d: clientbound_set_passengers_packet::ClientboundSetPassengersPacket, + 0x5e: clientbound_set_player_team_packet::ClientboundSetPlayerTeamPacket, + 0x5f: clientbound_set_score_packet::ClientboundSetScorePacket, + 0x60: clientbound_set_simulation_distance_packet::ClientboundSetSimulationDistancePacket, + 0x61: clientbound_set_subtitle_text_packet::ClientboundSetSubtitleTextPacket, + 0x62: clientbound_set_time_packet::ClientboundSetTimePacket, + 0x63: clientbound_set_title_text_packet::ClientboundSetTitleTextPacket, + 0x64: clientbound_set_titles_animation_packet::ClientboundSetTitlesAnimationPacket, + 0x65: clientbound_sound_entity_packet::ClientboundSoundEntityPacket, + 0x66: clientbound_sound_packet::ClientboundSoundPacket, + 0x67: clientbound_start_configuration_packet::ClientboundStartConfigurationPacket, + 0x68: clientbound_stop_sound_packet::ClientboundStopSoundPacket, + 0x69: clientbound_system_chat_packet::ClientboundSystemChatPacket, + 0x6a: clientbound_tab_list_packet::ClientboundTabListPacket, + 0x6b: clientbound_tag_query_packet::ClientboundTagQueryPacket, + 0x6c: clientbound_take_item_entity_packet::ClientboundTakeItemEntityPacket, + 0x6d: clientbound_teleport_entity_packet::ClientboundTeleportEntityPacket, + 0x6e: clientbound_ticking_state_packet::ClientboundTickingStatePacket, + 0x6f: clientbound_ticking_step_packet::ClientboundTickingStepPacket, + 0x70: clientbound_update_advancements_packet::ClientboundUpdateAdvancementsPacket, + 0x71: clientbound_update_attributes_packet::ClientboundUpdateAttributesPacket, + 0x72: clientbound_update_mob_effect_packet::ClientboundUpdateMobEffectPacket, + 0x73: clientbound_update_recipes_packet::ClientboundUpdateRecipesPacket, + 0x74: clientbound_update_tags_packet::ClientboundUpdateTagsPacket, } ); diff --git a/azalea-protocol/src/packets/game/serverbound_resource_pack_packet.rs b/azalea-protocol/src/packets/game/serverbound_resource_pack_packet.rs index 104f8f732..f285707b2 100755 --- a/azalea-protocol/src/packets/game/serverbound_resource_pack_packet.rs +++ b/azalea-protocol/src/packets/game/serverbound_resource_pack_packet.rs @@ -1,8 +1,10 @@ use azalea_buf::McBuf; use azalea_protocol_macros::ServerboundGamePacket; +use uuid::Uuid; #[derive(Clone, Debug, McBuf, ServerboundGamePacket)] pub struct ServerboundResourcePackPacket { + pub id: Uuid, pub action: Action, } @@ -12,4 +14,7 @@ pub enum Action { Declined = 1, FailedDownload = 2, Accepted = 3, + InvalidUrl = 4, + FailedReload = 5, + Discarded = 6, } diff --git a/azalea-protocol/src/packets/mod.rs b/azalea-protocol/src/packets/mod.rs index 8f099d074..8ede86de7 100755 --- a/azalea-protocol/src/packets/mod.rs +++ b/azalea-protocol/src/packets/mod.rs @@ -12,7 +12,7 @@ use std::io::{Cursor, Write}; // TODO: rename the packet files to just like clientbound_add_entity instead of // clientbound_add_entity_packet -pub const PROTOCOL_VERSION: u32 = 1073741986; +pub const PROTOCOL_VERSION: u32 = 1073741989; #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] pub enum ConnectionProtocol { diff --git a/azalea-registry/src/lib.rs b/azalea-registry/src/lib.rs index b73cb39c6..448dd3340 100755 --- a/azalea-registry/src/lib.rs +++ b/azalea-registry/src/lib.rs @@ -304,7 +304,7 @@ enum Block { DetectorRail => "minecraft:detector_rail", StickyPiston => "minecraft:sticky_piston", Cobweb => "minecraft:cobweb", - Grass => "minecraft:grass", + ShortGrass => "minecraft:short_grass", Fern => "minecraft:fern", DeadBush => "minecraft:dead_bush", Seagrass => "minecraft:seagrass", @@ -1363,6 +1363,7 @@ enum CommandArgumentKind { ItemPredicate => "minecraft:item_predicate", Color => "minecraft:color", Component => "minecraft:component", + Style => "minecraft:style", Message => "minecraft:message", NbtCompoundTag => "minecraft:nbt_compound_tag", NbtTag => "minecraft:nbt_tag", @@ -1976,7 +1977,7 @@ enum Item { ChiseledSandstone => "minecraft:chiseled_sandstone", CutSandstone => "minecraft:cut_sandstone", Cobweb => "minecraft:cobweb", - Grass => "minecraft:grass", + ShortGrass => "minecraft:short_grass", Fern => "minecraft:fern", Azalea => "minecraft:azalea", FloweringAzalea => "minecraft:flowering_azalea", @@ -5935,6 +5936,7 @@ enum BlockKind { WallTorch => "minecraft:wall_torch", Wall => "minecraft:wall", Waterlily => "minecraft:waterlily", + WaterloggedTransparent => "minecraft:waterlogged_transparent", WeatheringCopperBulb => "minecraft:weathering_copper_bulb", WeatheringCopperDoor => "minecraft:weathering_copper_door", WeatheringCopperFull => "minecraft:weathering_copper_full", @@ -6018,3 +6020,11 @@ enum TriggerKind { RecipeCrafted => "minecraft:recipe_crafted", } } + +registry! { +enum NumberFormatKind { + Blank => "minecraft:blank", + Styled => "minecraft:styled", + Fixed => "minecraft:fixed", +} +} diff --git a/azalea-registry/src/tags/blocks.rs b/azalea-registry/src/tags/blocks.rs index f21a80128..0396eb877 100644 --- a/azalea-registry/src/tags/blocks.rs +++ b/azalea-registry/src/tags/blocks.rs @@ -80,7 +80,7 @@ pub static MINEABLE_AXE: Lazy> = Lazy::new(|| { Block::Fern, Block::FletchingTable, Block::GlowLichen, - Block::Grass, + Block::ShortGrass, Block::HangingRoots, Block::JackOLantern, Block::Jukebox, @@ -845,7 +845,7 @@ pub static BAMBOO_PLANTABLE_ON: Lazy> = Lazy::new(|| { }); pub static SWORD_EFFICIENT: Lazy> = Lazy::new(|| { HashSet::from_iter(vec![ - Block::Grass, + Block::ShortGrass, Block::Fern, Block::DeadBush, Block::Vine, @@ -1534,7 +1534,7 @@ pub static DRAGON_TRANSPARENT: Lazy> = Lazy::new(|| HashSet::from_iter(vec![Block::Light, Block::Fire, Block::SoulFire])); pub static REPLACEABLE_BY_TREES: Lazy> = Lazy::new(|| { HashSet::from_iter(vec![ - Block::Grass, + Block::ShortGrass, Block::Fern, Block::DeadBush, Block::Vine, @@ -2042,7 +2042,7 @@ pub static ENCHANTMENT_POWER_TRANSMITTER: Lazy> = Lazy::new(|| { Block::Air, Block::Water, Block::Lava, - Block::Grass, + Block::ShortGrass, Block::Fern, Block::DeadBush, Block::Seagrass, @@ -2497,7 +2497,7 @@ pub static REPLACEABLE: Lazy> = Lazy::new(|| { Block::Air, Block::Water, Block::Lava, - Block::Grass, + Block::ShortGrass, Block::Fern, Block::DeadBush, Block::Seagrass, diff --git a/azalea/src/accept_resource_packs.rs b/azalea/src/accept_resource_packs.rs index 281af420f..13dc0746f 100644 --- a/azalea/src/accept_resource_packs.rs +++ b/azalea/src/accept_resource_packs.rs @@ -34,6 +34,7 @@ fn accept_resource_pack( send_packet_events.send(SendPacketEvent { entity: event.entity, packet: ServerboundResourcePackPacket { + id: event.id, action: serverbound_resource_pack_packet::Action::Accepted, } .get(), @@ -41,6 +42,7 @@ fn accept_resource_pack( send_packet_events.send(SendPacketEvent { entity: event.entity, packet: ServerboundResourcePackPacket { + id: event.id, action: serverbound_resource_pack_packet::Action::SuccessfullyLoaded, } .get(),