From b9c31efc0161457771861e6858a4a4da0b6a2727 Mon Sep 17 00:00:00 2001 From: mat Date: Sat, 7 May 2022 11:58:00 -0500 Subject: Initialize worldborder packet Also add varlong and replace #[varint] with #[var] --- azalea-protocol/src/mc_buf/write.rs | 43 ++++++++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 10 deletions(-) (limited to 'azalea-protocol/src/mc_buf/write.rs') diff --git a/azalea-protocol/src/mc_buf/write.rs b/azalea-protocol/src/mc_buf/write.rs index c125bf0b..10271bf8 100755 --- a/azalea-protocol/src/mc_buf/write.rs +++ b/azalea-protocol/src/mc_buf/write.rs @@ -146,8 +146,8 @@ pub trait McBufWritable { fn write_into(&self, buf: &mut impl Write) -> Result<(), std::io::Error>; } -pub trait McBufVarintWritable { - fn varint_write_into(&self, buf: &mut impl Write) -> Result<(), std::io::Error>; +pub trait McBufVarWritable { + fn var_write_into(&self, buf: &mut impl Write) -> Result<(), std::io::Error>; } impl McBufWritable for i32 { @@ -156,8 +156,8 @@ impl McBufWritable for i32 { } } -impl McBufVarintWritable for i32 { - fn varint_write_into(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { +impl McBufVarWritable for i32 { + fn var_write_into(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { buf.write_varint(*self) } } @@ -202,9 +202,32 @@ impl McBufWritable for u32 { } // u32 varint -impl McBufVarintWritable for u32 { - fn varint_write_into(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { - i32::varint_write_into(&(*self as i32), buf) +impl McBufVarWritable for u32 { + fn var_write_into(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { + i32::var_write_into(&(*self as i32), buf) + } +} + +impl McBufVarWritable for i64 { + fn var_write_into(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { + let mut buffer = [0]; + let mut cnt = 0; + let mut value = *self; + while value != 0 { + buffer[0] = (value & 0b0111_1111) as u8; + value = (value >> 7) & (i64::max_value() >> 6); + if value != 0 { + buffer[0] |= 0b1000_0000; + } + cnt += buf.write(&mut buffer)?; + } + Ok(()) + } +} + +impl McBufVarWritable for u64 { + fn var_write_into(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { + i64::var_write_into(&(*self as i64), buf) } } @@ -216,9 +239,9 @@ impl McBufWritable for u16 { } // u16 varint -impl McBufVarintWritable for u16 { - fn varint_write_into(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { - i32::varint_write_into(&(*self as i32), buf) +impl McBufVarWritable for u16 { + fn var_write_into(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { + i32::var_write_into(&(*self as i32), buf) } } -- cgit v1.2.3