use std::io::{self, Cursor, Write}; use azalea_buf::{AzBuf, BufReadError}; use azalea_core::bitset::FixedBitSet; use azalea_protocol_macros::ServerboundGamePacket; #[derive(Clone, Debug, Default, Eq, PartialEq, ServerboundGamePacket)] pub struct ServerboundPlayerInput { pub forward: bool, pub backward: bool, pub left: bool, pub right: bool, pub jump: bool, pub shift: bool, pub sprint: bool, } impl AzBuf for ServerboundPlayerInput { fn azalea_read(buf: &mut Cursor<&[u8]>) -> Result { let set = FixedBitSet::<7>::azalea_read(buf)?; Ok(Self { forward: set.index(0), backward: set.index(1), left: set.index(2), right: set.index(3), jump: set.index(4), shift: set.index(5), sprint: set.index(6), }) } fn azalea_write(&self, buf: &mut impl Write) -> io::Result<()> { let mut set = FixedBitSet::<7>::new(); if self.forward { set.set(0); } if self.backward { set.set(1); } if self.left { set.set(2); } if self.right { set.set(3); } if self.jump { set.set(4); } if self.shift { set.set(5); } if self.sprint { set.set(6); } set.azalea_write(buf) } }