mirror of
https://github.com/mat-1/azalea.git
synced 2025-08-02 14:26:04 +00:00
add files
This commit is contained in:
parent
c31c6fa7d0
commit
7cdd417145
2 changed files with 112 additions and 0 deletions
|
@ -0,0 +1,7 @@
|
|||
use packet_macros::GamePacket;
|
||||
|
||||
/// Sent to change the player's slot selection.
|
||||
#[derive(Clone, Debug, GamePacket)]
|
||||
pub struct ClientboundSetCarriedItemPacket {
|
||||
pub slot: u8,
|
||||
}
|
|
@ -0,0 +1,105 @@
|
|||
use std::collections::HashMap;
|
||||
|
||||
use async_trait::async_trait;
|
||||
use azalea_core::resource_location::ResourceLocation;
|
||||
use packet_macros::GamePacket;
|
||||
use tokio::io::AsyncRead;
|
||||
|
||||
use crate::mc_buf::{McBufReadable, McBufWritable, Readable, Writable};
|
||||
|
||||
#[derive(Clone, Debug, GamePacket)]
|
||||
pub struct ClientboundUpdateTagsPacket {
|
||||
pub tags: HashMap<ResourceLocation, Vec<Tags>>,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct Tags {
|
||||
pub name: ResourceLocation,
|
||||
pub elements: Vec<i32>,
|
||||
}
|
||||
|
||||
#[async_trait]
|
||||
impl McBufReadable for HashMap<ResourceLocation, Vec<Tags>> {
|
||||
async fn read_into<R>(buf: &mut R) -> Result<Self, String>
|
||||
where
|
||||
R: AsyncRead + std::marker::Unpin + std::marker::Send,
|
||||
{
|
||||
println!("reading tags!");
|
||||
let length = buf.read_varint().await? as usize;
|
||||
println!("length: {}", length);
|
||||
let mut data = HashMap::with_capacity(length);
|
||||
for _ in 0..length {
|
||||
let tag_type = buf.read_resource_location().await?;
|
||||
println!("read tag type {}", tag_type);
|
||||
let tags_count = buf.read_varint().await? as usize;
|
||||
let mut tags_vec = Vec::with_capacity(tags_count);
|
||||
for _ in 0..tags_count {
|
||||
let tags = Tags::read_into(buf).await?;
|
||||
tags_vec.push(tags);
|
||||
}
|
||||
println!("tags: {} {:?}", tag_type, tags_vec);
|
||||
data.insert(tag_type, tags_vec);
|
||||
}
|
||||
Ok(data)
|
||||
}
|
||||
}
|
||||
|
||||
impl McBufWritable for HashMap<ResourceLocation, Vec<Tags>> {
|
||||
fn write_into(&self, buf: &mut Vec<u8>) -> Result<(), std::io::Error> {
|
||||
buf.write_varint(self.len() as i32)?;
|
||||
for (k, v) in self {
|
||||
k.write_into(buf)?;
|
||||
v.write_into(buf)?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
#[async_trait]
|
||||
impl McBufReadable for Vec<Tags> {
|
||||
async fn read_into<R>(buf: &mut R) -> Result<Self, String>
|
||||
where
|
||||
R: AsyncRead + std::marker::Unpin + std::marker::Send,
|
||||
{
|
||||
let tags_count = buf.read_varint().await? as usize;
|
||||
let mut tags_vec = Vec::with_capacity(tags_count);
|
||||
for _ in 0..tags_count {
|
||||
let tags = Tags::read_into(buf).await?;
|
||||
tags_vec.push(tags);
|
||||
}
|
||||
Ok(tags_vec)
|
||||
}
|
||||
}
|
||||
|
||||
impl McBufWritable for Vec<Tags> {
|
||||
fn write_into(&self, buf: &mut Vec<u8>) -> Result<(), std::io::Error> {
|
||||
buf.write_varint(self.len() as i32)?;
|
||||
for tag in self {
|
||||
tag.write_into(buf)?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
#[async_trait]
|
||||
impl McBufReadable for Tags {
|
||||
async fn read_into<R>(buf: &mut R) -> Result<Self, String>
|
||||
where
|
||||
R: AsyncRead + std::marker::Unpin + std::marker::Send,
|
||||
{
|
||||
println!("reading tags.");
|
||||
let name = buf.read_resource_location().await?;
|
||||
println!("tags name: {}", name);
|
||||
let elements = buf.read_int_id_list().await?;
|
||||
println!("elements: {:?}", elements);
|
||||
Ok(Tags { name, elements })
|
||||
}
|
||||
}
|
||||
|
||||
impl McBufWritable for Tags {
|
||||
fn write_into(&self, buf: &mut Vec<u8>) -> Result<(), std::io::Error> {
|
||||
self.name.write_into(buf)?;
|
||||
buf.write_int_id_list(&self.elements)?;
|
||||
Ok(())
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue