aboutsummaryrefslogtreecommitdiff
path: root/azalea-protocol/src/mc_buf/write.rs
diff options
context:
space:
mode:
authormat <github@matdoes.dev>2022-05-07 11:58:00 -0500
committermat <github@matdoes.dev>2022-05-07 11:58:00 -0500
commitb9c31efc0161457771861e6858a4a4da0b6a2727 (patch)
tree5ce24cf6e79f8fb640b4213bc60597f89b2f0bae /azalea-protocol/src/mc_buf/write.rs
parent79bf5771303c70115cba09ac55c7b7a2d3e32091 (diff)
downloadazalea-drasl-b9c31efc0161457771861e6858a4a4da0b6a2727.tar.xz
Initialize worldborder packet
Also add varlong and replace #[varint] with #[var]
Diffstat (limited to 'azalea-protocol/src/mc_buf/write.rs')
-rwxr-xr-xazalea-protocol/src/mc_buf/write.rs43
1 files changed, 33 insertions, 10 deletions
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)
}
}