protocol/item: update to support protocol_version >= 404 (1.13.2+) (#524)

This commit is contained in:
Kezi 2021-03-25 16:21:25 +01:00 committed by GitHub
parent abbc58b9ef
commit eb452abbb5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 24 additions and 10 deletions

View File

@ -17,7 +17,7 @@ use crate::protocol::{self, Serializable};
use byteorder::{BigEndian, ReadBytesExt, WriteBytesExt};
use std::io;
#[derive(Debug)]
#[derive(Debug, Clone)]
pub struct Stack {
pub id: isize,
pub count: isize,
@ -88,16 +88,30 @@ impl Serializable for Option<Stack> {
}))
}
fn write_to<W: io::Write>(&self, buf: &mut W) -> Result<(), protocol::Error> {
match *self {
Some(ref val) => {
// TODO: if protocol_version >= 404, send present and id varint, no damage, for 1.13.2
buf.write_i16::<BigEndian>(val.id as i16)?;
buf.write_u8(val.count as u8)?;
buf.write_i16::<BigEndian>(val.damage.unwrap_or(0) as i16)?;
// TODO: compress zlib NBT if 1.7
val.tag.write_to(buf)?;
let protocol_version = protocol::current_protocol_version();
if protocol_version >= 404 {
match *self {
Some(ref val) => {
buf.write_u8(1)?; //present
crate::protocol::VarInt(val.id as i32).write_to(buf)?;
buf.write_u8(val.count as u8)?;
val.tag.write_to(buf)?;
}
None => {
buf.write_u8(0)?; // not present
}
}
} else {
match *self {
Some(ref val) => {
buf.write_i16::<BigEndian>(val.id as i16)?;
buf.write_u8(val.count as u8)?;
buf.write_i16::<BigEndian>(val.damage.unwrap_or(0) as i16)?;
// TODO: compress zlib NBT if 1.7
val.tag.write_to(buf)?;
}
None => buf.write_i16::<BigEndian>(-1)?,
}
None => buf.write_i16::<BigEndian>(-1)?,
}
Result::Ok(())
}