aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormat <git@matdoes.dev>2025-06-04 10:26:32 +0330
committermat <git@matdoes.dev>2025-06-04 10:26:32 +0330
commit93a96786a8a46068f5d9d7d3e503645d7fc4b830 (patch)
tree8ba5daea9a93e31c1367c6672bf14eb5e0408296
parent123c15a2936639244c3485c5db789c845f7c2e43 (diff)
downloadazalea-drasl-93a96786a8a46068f5d9d7d3e503645d7fc4b830.tar.xz
handle set_held_slot packet and add more Into BlockStates impls
-rw-r--r--azalea-block/src/range.rs25
-rw-r--r--azalea-client/src/plugins/packet/game/mod.rs11
2 files changed, 31 insertions, 5 deletions
diff --git a/azalea-block/src/range.rs b/azalea-block/src/range.rs
index 7960b5c4..76b18079 100644
--- a/azalea-block/src/range.rs
+++ b/azalea-block/src/range.rs
@@ -3,6 +3,8 @@ use std::{
ops::{Add, RangeInclusive},
};
+use azalea_registry::Block;
+
use crate::{BlockState, block_state::BlockStateIntegerRepr};
#[derive(Debug, Clone)]
@@ -45,14 +47,14 @@ impl Add for BlockStates {
}
}
-impl From<HashSet<azalea_registry::Block>> for BlockStates {
- fn from(set: HashSet<azalea_registry::Block>) -> Self {
+impl From<HashSet<Block>> for BlockStates {
+ fn from(set: HashSet<Block>) -> Self {
Self::from(&set)
}
}
-impl From<&HashSet<azalea_registry::Block>> for BlockStates {
- fn from(set: &HashSet<azalea_registry::Block>) -> Self {
+impl From<&HashSet<Block>> for BlockStates {
+ fn from(set: &HashSet<Block>) -> Self {
let mut block_states = HashSet::with_capacity(set.len());
for &block in set {
block_states.extend(BlockStates::from(block));
@@ -60,3 +62,18 @@ impl From<&HashSet<azalea_registry::Block>> for BlockStates {
Self { set: block_states }
}
}
+
+impl<const N: usize> From<[Block; N]> for BlockStates {
+ fn from(arr: [Block; N]) -> Self {
+ Self::from(&arr[..])
+ }
+}
+impl From<&[Block]> for BlockStates {
+ fn from(arr: &[Block]) -> Self {
+ let mut block_states = HashSet::with_capacity(arr.len());
+ for &block in arr {
+ block_states.extend(BlockStates::from(block));
+ }
+ Self { set: block_states }
+ }
+}
diff --git a/azalea-client/src/plugins/packet/game/mod.rs b/azalea-client/src/plugins/packet/game/mod.rs
index 670058c3..2fb9e1cd 100644
--- a/azalea-client/src/plugins/packet/game/mod.rs
+++ b/azalea-client/src/plugins/packet/game/mod.rs
@@ -1608,7 +1608,16 @@ impl GamePacketHandler<'_> {
pub fn store_cookie(&mut self, _p: &ClientboundStoreCookie) {}
pub fn transfer(&mut self, _p: &ClientboundTransfer) {}
pub fn move_minecart_along_track(&mut self, _p: &ClientboundMoveMinecartAlongTrack) {}
- pub fn set_held_slot(&mut self, _p: &ClientboundSetHeldSlot) {}
+ pub fn set_held_slot(&mut self, p: &ClientboundSetHeldSlot) {
+ debug!("Got set held slot packet {p:?}");
+
+ as_system::<Query<&mut Inventory>>(self.ecs, |mut query| {
+ let mut inventory = query.get_mut(self.player).unwrap();
+ if p.slot <= 8 {
+ inventory.selected_hotbar_slot = p.slot as u8;
+ }
+ });
+ }
pub fn set_player_inventory(&mut self, _p: &ClientboundSetPlayerInventory) {}
pub fn projectile_power(&mut self, _p: &ClientboundProjectilePower) {}
pub fn custom_report_details(&mut self, _p: &ClientboundCustomReportDetails) {}