Clientbound Packets: use ids from JSON
This commit is contained in:
parent
5507b2069f
commit
a6f3b3f748
@ -50,7 +50,7 @@ and customizable experience. It prioritizes performance and player enjoyment whi
|
|||||||
- [x] Chunk Loading
|
- [x] Chunk Loading
|
||||||
- [x] Chunk Generation
|
- [x] Chunk Generation
|
||||||
- [x] Scoreboard
|
- [x] Scoreboard
|
||||||
- [ ] World Borders
|
- [x] World Borders
|
||||||
- [ ] World Saving
|
- [ ] World Saving
|
||||||
- Player
|
- Player
|
||||||
- [x] Player Skins
|
- [x] Player Skins
|
||||||
|
|||||||
@ -12,4 +12,4 @@ maven_group=de.snowii
|
|||||||
archives_base_name=extractor
|
archives_base_name=extractor
|
||||||
# Dependencies
|
# Dependencies
|
||||||
# check this on https://modmuss50.me/fabric.html
|
# check this on https://modmuss50.me/fabric.html
|
||||||
fabric_version=0.106.1+1.21.3
|
fabric_version=0.107.0+1.21.3
|
||||||
|
|||||||
@ -2,6 +2,8 @@ use proc_macro::TokenStream;
|
|||||||
use quote::quote;
|
use quote::quote;
|
||||||
|
|
||||||
extern crate proc_macro;
|
extern crate proc_macro;
|
||||||
|
|
||||||
|
mod packet;
|
||||||
#[proc_macro_attribute]
|
#[proc_macro_attribute]
|
||||||
pub fn client_packet(input: TokenStream, item: TokenStream) -> TokenStream {
|
pub fn client_packet(input: TokenStream, item: TokenStream) -> TokenStream {
|
||||||
let ast: syn::DeriveInput = syn::parse(item.clone()).unwrap();
|
let ast: syn::DeriveInput = syn::parse(item.clone()).unwrap();
|
||||||
@ -10,13 +12,13 @@ pub fn client_packet(input: TokenStream, item: TokenStream) -> TokenStream {
|
|||||||
|
|
||||||
let (impl_generics, ty_generics, _) = ast.generics.split_for_impl();
|
let (impl_generics, ty_generics, _) = ast.generics.split_for_impl();
|
||||||
|
|
||||||
let input: proc_macro2::TokenStream = input.into();
|
let input: proc_macro2::TokenStream = packet::packet_clientbound(input);
|
||||||
let item: proc_macro2::TokenStream = item.into();
|
let item: proc_macro2::TokenStream = item.into();
|
||||||
|
|
||||||
let gen = quote! {
|
let gen = quote! {
|
||||||
#item
|
#item
|
||||||
impl #impl_generics crate::bytebuf::packet_id::ClientPacketID for #name #ty_generics {
|
impl #impl_generics crate::bytebuf::packet_id::ClientPacketID for #name #ty_generics {
|
||||||
const PACKET_ID: i32 = #input;
|
const PACKET_ID: i32 = #input as i32;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
42
pumpkin-macros/src/packet.rs
Normal file
42
pumpkin-macros/src/packet.rs
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
use std::{collections::HashMap, sync::LazyLock};
|
||||||
|
|
||||||
|
use proc_macro::TokenStream;
|
||||||
|
use quote::quote;
|
||||||
|
use serde::Deserialize;
|
||||||
|
|
||||||
|
#[derive(Deserialize)]
|
||||||
|
pub struct Packet {
|
||||||
|
name: String,
|
||||||
|
phase: String,
|
||||||
|
side: String,
|
||||||
|
id: u16,
|
||||||
|
}
|
||||||
|
|
||||||
|
static PACKETS: LazyLock<HashMap<String, u16>> = LazyLock::new(|| {
|
||||||
|
serde_json::from_str::<Vec<Packet>>(include_str!("../../assets/packets.json"))
|
||||||
|
.expect("Could not parse packets.json registry.")
|
||||||
|
.into_iter()
|
||||||
|
.map(|val| (format!("{}:{}:{}", val.side, val.phase, val.name), val.id))
|
||||||
|
.collect()
|
||||||
|
});
|
||||||
|
|
||||||
|
pub(crate) fn packet_clientbound(item: TokenStream) -> proc_macro2::TokenStream {
|
||||||
|
let input_string = item.to_string();
|
||||||
|
let packet_name = input_string.trim_matches('"');
|
||||||
|
|
||||||
|
let id = PACKETS
|
||||||
|
.get(&format!("clientbound:{}", packet_name))
|
||||||
|
.expect("Invalid Packet");
|
||||||
|
quote! { #id }
|
||||||
|
}
|
||||||
|
|
||||||
|
#[expect(dead_code)]
|
||||||
|
pub(crate) fn packet_serverbound(item: TokenStream) -> proc_macro2::TokenStream {
|
||||||
|
let input_string = item.to_string();
|
||||||
|
let packet_name = input_string.trim_matches('"');
|
||||||
|
|
||||||
|
let id = PACKETS
|
||||||
|
.get(&format!("serverbound:{}", packet_name))
|
||||||
|
.expect("Invalid Packet");
|
||||||
|
quote! { #id }
|
||||||
|
}
|
||||||
@ -7,10 +7,10 @@ use serde::Deserialize;
|
|||||||
#[derive(Deserialize)]
|
#[derive(Deserialize)]
|
||||||
pub struct Particle {
|
pub struct Particle {
|
||||||
name: String,
|
name: String,
|
||||||
id: u32,
|
id: u16,
|
||||||
}
|
}
|
||||||
|
|
||||||
static SOUNDS: LazyLock<HashMap<String, u32>> = LazyLock::new(|| {
|
static SOUNDS: LazyLock<HashMap<String, u16>> = LazyLock::new(|| {
|
||||||
serde_json::from_str::<Vec<Particle>>(include_str!("../../assets/particles.json"))
|
serde_json::from_str::<Vec<Particle>>(include_str!("../../assets/particles.json"))
|
||||||
.expect("Could not parse particles.json registry.")
|
.expect("Could not parse particles.json registry.")
|
||||||
.into_iter()
|
.into_iter()
|
||||||
|
|||||||
@ -7,10 +7,10 @@ use serde::Deserialize;
|
|||||||
#[derive(Deserialize)]
|
#[derive(Deserialize)]
|
||||||
pub struct Sound {
|
pub struct Sound {
|
||||||
name: String,
|
name: String,
|
||||||
id: u32,
|
id: u16,
|
||||||
}
|
}
|
||||||
|
|
||||||
static SOUNDS: LazyLock<HashMap<String, u32>> = LazyLock::new(|| {
|
static SOUNDS: LazyLock<HashMap<String, u16>> = LazyLock::new(|| {
|
||||||
serde_json::from_str::<Vec<Sound>>(include_str!("../../assets/sounds.json"))
|
serde_json::from_str::<Vec<Sound>>(include_str!("../../assets/sounds.json"))
|
||||||
.expect("Could not parse sounds.json registry.")
|
.expect("Could not parse sounds.json registry.")
|
||||||
.into_iter()
|
.into_iter()
|
||||||
|
|||||||
@ -3,10 +3,8 @@ use pumpkin_core::text::TextComponent;
|
|||||||
use pumpkin_macros::client_packet;
|
use pumpkin_macros::client_packet;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
use super::ClientboundConfigPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundConfigPackets::AddResourcePack as i32)]
|
#[client_packet("configuration:resource_pack_push")]
|
||||||
pub struct CConfigAddResourcePack<'a> {
|
pub struct CConfigAddResourcePack<'a> {
|
||||||
uuid: uuid::Uuid,
|
uuid: uuid::Uuid,
|
||||||
url: &'a str,
|
url: &'a str,
|
||||||
|
|||||||
@ -1,9 +1,7 @@
|
|||||||
use pumpkin_macros::client_packet;
|
use pumpkin_macros::client_packet;
|
||||||
|
|
||||||
use super::ClientboundConfigPackets;
|
|
||||||
|
|
||||||
#[derive(serde::Serialize)]
|
#[derive(serde::Serialize)]
|
||||||
#[client_packet(ClientboundConfigPackets::Disconnect as i32)]
|
#[client_packet("configuration:disconnect")]
|
||||||
pub struct CConfigDisconnect<'a> {
|
pub struct CConfigDisconnect<'a> {
|
||||||
reason: &'a str,
|
reason: &'a str,
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,10 +2,8 @@ use pumpkin_macros::client_packet;
|
|||||||
|
|
||||||
use crate::Identifier;
|
use crate::Identifier;
|
||||||
|
|
||||||
use super::ClientboundConfigPackets;
|
|
||||||
|
|
||||||
#[derive(serde::Serialize)]
|
#[derive(serde::Serialize)]
|
||||||
#[client_packet(ClientboundConfigPackets::CookieRequest as i32)]
|
#[client_packet("configuration:cookie_request")]
|
||||||
pub struct CCookieRequest {
|
pub struct CCookieRequest {
|
||||||
key: Identifier,
|
key: Identifier,
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,9 +1,7 @@
|
|||||||
use pumpkin_macros::client_packet;
|
use pumpkin_macros::client_packet;
|
||||||
|
|
||||||
use super::ClientboundConfigPackets;
|
|
||||||
|
|
||||||
#[derive(serde::Serialize)]
|
#[derive(serde::Serialize)]
|
||||||
#[client_packet(ClientboundConfigPackets::Finish as i32)]
|
#[client_packet("configuration:finish_configuration")]
|
||||||
pub struct CFinishConfig {}
|
pub struct CFinishConfig {}
|
||||||
|
|
||||||
impl Default for CFinishConfig {
|
impl Default for CFinishConfig {
|
||||||
|
|||||||
@ -2,9 +2,7 @@ use pumpkin_macros::client_packet;
|
|||||||
|
|
||||||
use crate::{bytebuf::ByteBuffer, ClientPacket, KnownPack};
|
use crate::{bytebuf::ByteBuffer, ClientPacket, KnownPack};
|
||||||
|
|
||||||
use super::ClientboundConfigPackets;
|
#[client_packet("configuration:select_known_packs")]
|
||||||
|
|
||||||
#[client_packet(ClientboundConfigPackets::KnownPacks as i32)]
|
|
||||||
pub struct CKnownPacks<'a> {
|
pub struct CKnownPacks<'a> {
|
||||||
known_packs: &'a [KnownPack<'a>],
|
known_packs: &'a [KnownPack<'a>],
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,10 +1,8 @@
|
|||||||
use pumpkin_macros::client_packet;
|
use pumpkin_macros::client_packet;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
use super::ClientboundConfigPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundConfigPackets::PluginMessage as i32)]
|
#[client_packet("configuration:custom_payload")]
|
||||||
pub struct CPluginMessage<'a> {
|
pub struct CPluginMessage<'a> {
|
||||||
channel: &'a str,
|
channel: &'a str,
|
||||||
data: &'a [u8],
|
data: &'a [u8],
|
||||||
|
|||||||
@ -2,9 +2,7 @@ use pumpkin_macros::client_packet;
|
|||||||
|
|
||||||
use crate::{bytebuf::ByteBuffer, ClientPacket};
|
use crate::{bytebuf::ByteBuffer, ClientPacket};
|
||||||
|
|
||||||
use super::ClientboundConfigPackets;
|
#[client_packet("configuration:registry_data")]
|
||||||
|
|
||||||
#[client_packet(ClientboundConfigPackets::RegistryData as i32)]
|
|
||||||
pub struct CRegistryData<'a> {
|
pub struct CRegistryData<'a> {
|
||||||
registry_id: &'a str,
|
registry_id: &'a str,
|
||||||
entries: &'a [RegistryEntry<'a>],
|
entries: &'a [RegistryEntry<'a>],
|
||||||
|
|||||||
@ -13,26 +13,3 @@ pub use c_finish_config::*;
|
|||||||
pub use c_known_packs::*;
|
pub use c_known_packs::*;
|
||||||
pub use c_plugin_message::*;
|
pub use c_plugin_message::*;
|
||||||
pub use c_registry_data::*;
|
pub use c_registry_data::*;
|
||||||
|
|
||||||
/// DO NOT CHANGE ORDER
|
|
||||||
/// This Enum has the exact order like vanilla, Vanilla parses their Packet IDs from the enum order. Its also way easier to port.
|
|
||||||
#[repr(i32)]
|
|
||||||
pub enum ClientboundConfigPackets {
|
|
||||||
CookieRequest,
|
|
||||||
PluginMessage,
|
|
||||||
Disconnect,
|
|
||||||
Finish,
|
|
||||||
KeepAlive,
|
|
||||||
Ping,
|
|
||||||
ResetChat,
|
|
||||||
RegistryData,
|
|
||||||
RemoveResourcePack,
|
|
||||||
AddResourcePack,
|
|
||||||
StoreCookie,
|
|
||||||
Transfer,
|
|
||||||
FeatureFlags,
|
|
||||||
UpdateTags,
|
|
||||||
KnownPacks,
|
|
||||||
CustomReportDetails,
|
|
||||||
ServerLinks,
|
|
||||||
}
|
|
||||||
|
|||||||
@ -3,10 +3,8 @@ use serde::Serialize;
|
|||||||
|
|
||||||
use crate::VarInt;
|
use crate::VarInt;
|
||||||
|
|
||||||
use super::ClientboundLoginPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundLoginPackets::EncryptionRequest as i32)]
|
#[client_packet("login:hello")]
|
||||||
pub struct CEncryptionRequest<'a> {
|
pub struct CEncryptionRequest<'a> {
|
||||||
server_id: &'a str, // 20
|
server_id: &'a str, // 20
|
||||||
public_key_length: VarInt,
|
public_key_length: VarInt,
|
||||||
|
|||||||
@ -1,10 +1,8 @@
|
|||||||
use pumpkin_macros::client_packet;
|
use pumpkin_macros::client_packet;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
use super::ClientboundLoginPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundLoginPackets::Disconnect as i32)]
|
#[client_packet("login:login_disconnect")]
|
||||||
pub struct CLoginDisconnect<'a> {
|
pub struct CLoginDisconnect<'a> {
|
||||||
json_reason: &'a str,
|
json_reason: &'a str,
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,9 +2,7 @@ use pumpkin_macros::client_packet;
|
|||||||
|
|
||||||
use crate::{bytebuf::ByteBuffer, ClientPacket, Property};
|
use crate::{bytebuf::ByteBuffer, ClientPacket, Property};
|
||||||
|
|
||||||
use super::ClientboundLoginPackets;
|
#[client_packet("login:login_finished")]
|
||||||
|
|
||||||
#[client_packet(ClientboundLoginPackets::LoginSuccess as i32)]
|
|
||||||
pub struct CLoginSuccess<'a> {
|
pub struct CLoginSuccess<'a> {
|
||||||
pub uuid: &'a uuid::Uuid,
|
pub uuid: &'a uuid::Uuid,
|
||||||
pub username: &'a str, // 16
|
pub username: &'a str, // 16
|
||||||
|
|||||||
@ -3,10 +3,8 @@ use serde::Serialize;
|
|||||||
|
|
||||||
use crate::VarInt;
|
use crate::VarInt;
|
||||||
|
|
||||||
use super::ClientboundLoginPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundLoginPackets::LoginPluginRequest as i32)]
|
#[client_packet("login:custom_query")]
|
||||||
pub struct CLoginPluginRequest<'a> {
|
pub struct CLoginPluginRequest<'a> {
|
||||||
message_id: VarInt,
|
message_id: VarInt,
|
||||||
channel: &'a str,
|
channel: &'a str,
|
||||||
|
|||||||
@ -3,10 +3,8 @@ use serde::Serialize;
|
|||||||
|
|
||||||
use crate::VarInt;
|
use crate::VarInt;
|
||||||
|
|
||||||
use super::ClientboundLoginPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundLoginPackets::SetCompression as i32)]
|
#[client_packet("login:login_compression")]
|
||||||
pub struct CSetCompression {
|
pub struct CSetCompression {
|
||||||
threshold: VarInt,
|
threshold: VarInt,
|
||||||
}
|
}
|
||||||
|
|||||||
@ -9,15 +9,3 @@ pub use c_login_disconnect::*;
|
|||||||
pub use c_login_success::*;
|
pub use c_login_success::*;
|
||||||
pub use c_plugin_request::*;
|
pub use c_plugin_request::*;
|
||||||
pub use c_set_compression::*;
|
pub use c_set_compression::*;
|
||||||
|
|
||||||
/// DO NOT CHANGE ORDER
|
|
||||||
/// This Enum has the exact order like vanilla, Vanilla parses their Packet IDs from the enum order. Its also way easier to port.
|
|
||||||
#[repr(i32)]
|
|
||||||
pub enum ClientboundLoginPackets {
|
|
||||||
Disconnect,
|
|
||||||
EncryptionRequest,
|
|
||||||
LoginSuccess,
|
|
||||||
SetCompression,
|
|
||||||
LoginPluginRequest,
|
|
||||||
CookieRequest,
|
|
||||||
}
|
|
||||||
|
|||||||
@ -3,10 +3,8 @@ use serde::Serialize;
|
|||||||
|
|
||||||
use crate::VarInt;
|
use crate::VarInt;
|
||||||
|
|
||||||
use super::ClientboundPlayPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundPlayPackets::AcknowledgeBlockChanges as i32)]
|
#[client_packet("play:block_changed_ack")]
|
||||||
pub struct CAcknowledgeBlockChange {
|
pub struct CAcknowledgeBlockChange {
|
||||||
sequence_id: VarInt,
|
sequence_id: VarInt,
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,10 +3,8 @@ use pumpkin_core::text::TextComponent;
|
|||||||
use pumpkin_macros::client_packet;
|
use pumpkin_macros::client_packet;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
use super::ClientboundPlayPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundPlayPackets::ActionBar as i32)]
|
#[client_packet("play:set_action_bar_text")]
|
||||||
pub struct CActionBar<'a> {
|
pub struct CActionBar<'a> {
|
||||||
action_bar: TextComponent<'a>,
|
action_bar: TextComponent<'a>,
|
||||||
}
|
}
|
||||||
|
|||||||
@ -5,10 +5,8 @@ use serde::Serialize;
|
|||||||
|
|
||||||
use crate::VarInt;
|
use crate::VarInt;
|
||||||
|
|
||||||
use super::ClientboundPlayPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundPlayPackets::BlockBreakAnimation as i32)]
|
#[client_packet("play:block_destruction")]
|
||||||
pub struct CSetBlockDestroyStage {
|
pub struct CSetBlockDestroyStage {
|
||||||
entity_id: VarInt,
|
entity_id: VarInt,
|
||||||
location: WorldPosition,
|
location: WorldPosition,
|
||||||
|
|||||||
@ -5,10 +5,8 @@ use serde::Serialize;
|
|||||||
|
|
||||||
use crate::VarInt;
|
use crate::VarInt;
|
||||||
|
|
||||||
use super::ClientboundPlayPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundPlayPackets::BlockChange as i32)]
|
#[client_packet("play:block_update")]
|
||||||
pub struct CBlockUpdate<'a> {
|
pub struct CBlockUpdate<'a> {
|
||||||
location: &'a WorldPosition,
|
location: &'a WorldPosition,
|
||||||
block_id: VarInt,
|
block_id: VarInt,
|
||||||
|
|||||||
@ -2,10 +2,8 @@ use pumpkin_macros::client_packet;
|
|||||||
|
|
||||||
use crate::VarInt;
|
use crate::VarInt;
|
||||||
|
|
||||||
use super::ClientboundPlayPackets;
|
|
||||||
|
|
||||||
#[derive(serde::Serialize)]
|
#[derive(serde::Serialize)]
|
||||||
#[client_packet(ClientboundPlayPackets::UpdateViewPosition as i32)]
|
#[client_packet("play:set_chunk_cache_center")]
|
||||||
pub struct CCenterChunk {
|
pub struct CCenterChunk {
|
||||||
pub chunk_x: VarInt,
|
pub chunk_x: VarInt,
|
||||||
pub chunk_z: VarInt,
|
pub chunk_z: VarInt,
|
||||||
|
|||||||
@ -1,10 +1,8 @@
|
|||||||
use pumpkin_macros::client_packet;
|
use pumpkin_macros::client_packet;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
use super::ClientboundPlayPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundPlayPackets::ServerDifficulty as i32)]
|
#[client_packet("play:change_difficulty")]
|
||||||
pub struct CChangeDifficulty {
|
pub struct CChangeDifficulty {
|
||||||
difficulty: u8,
|
difficulty: u8,
|
||||||
locked: bool,
|
locked: bool,
|
||||||
|
|||||||
@ -6,9 +6,7 @@ use itertools::Itertools;
|
|||||||
use pumpkin_macros::client_packet;
|
use pumpkin_macros::client_packet;
|
||||||
use pumpkin_world::{chunk::ChunkData, DIRECT_PALETTE_BITS};
|
use pumpkin_world::{chunk::ChunkData, DIRECT_PALETTE_BITS};
|
||||||
|
|
||||||
use super::ClientboundPlayPackets;
|
#[client_packet("play:level_chunk_with_light")]
|
||||||
|
|
||||||
#[client_packet(ClientboundPlayPackets::ChunkData as i32)]
|
|
||||||
pub struct CChunkData<'a>(pub &'a ChunkData);
|
pub struct CChunkData<'a>(pub &'a ChunkData);
|
||||||
|
|
||||||
impl<'a> ClientPacket for CChunkData<'a> {
|
impl<'a> ClientPacket for CChunkData<'a> {
|
||||||
|
|||||||
@ -3,10 +3,8 @@ use serde::Serialize;
|
|||||||
|
|
||||||
use crate::VarInt;
|
use crate::VarInt;
|
||||||
|
|
||||||
use super::ClientboundPlayPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundPlayPackets::CloseWindow as i32)]
|
#[client_packet("play:container_close")]
|
||||||
pub struct CCloseContainer {
|
pub struct CCloseContainer {
|
||||||
window_id: VarInt,
|
window_id: VarInt,
|
||||||
}
|
}
|
||||||
|
|||||||
@ -5,10 +5,8 @@ use serde::Serialize;
|
|||||||
|
|
||||||
use crate::VarInt;
|
use crate::VarInt;
|
||||||
|
|
||||||
use super::ClientboundPlayPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundPlayPackets::DisguisedChat as i32)]
|
#[client_packet("play:disguised_chat")]
|
||||||
pub struct CDisguisedChatMessage<'a> {
|
pub struct CDisguisedChatMessage<'a> {
|
||||||
message: TextComponent<'a>,
|
message: TextComponent<'a>,
|
||||||
chat_type: VarInt,
|
chat_type: VarInt,
|
||||||
|
|||||||
@ -3,10 +3,8 @@ use serde::Serialize;
|
|||||||
|
|
||||||
use crate::VarInt;
|
use crate::VarInt;
|
||||||
|
|
||||||
use super::ClientboundPlayPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundPlayPackets::DisplayScoreboard as i32)]
|
#[client_packet("play:set_display_objective")]
|
||||||
pub struct CDisplayObjective<'a> {
|
pub struct CDisplayObjective<'a> {
|
||||||
position: VarInt,
|
position: VarInt,
|
||||||
score_name: &'a str,
|
score_name: &'a str,
|
||||||
|
|||||||
@ -3,10 +3,8 @@ use serde::Serialize;
|
|||||||
|
|
||||||
use crate::VarInt;
|
use crate::VarInt;
|
||||||
|
|
||||||
use super::ClientboundPlayPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundPlayPackets::EntityAnimation as i32)]
|
#[client_packet("play:animate")]
|
||||||
pub struct CEntityAnimation {
|
pub struct CEntityAnimation {
|
||||||
entity_id: VarInt,
|
entity_id: VarInt,
|
||||||
/// See `Animation`
|
/// See `Animation`
|
||||||
|
|||||||
@ -3,10 +3,8 @@ use serde::Serialize;
|
|||||||
|
|
||||||
use crate::VarInt;
|
use crate::VarInt;
|
||||||
|
|
||||||
use super::ClientboundPlayPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundPlayPackets::EntityMetadata as i32)]
|
#[client_packet("play:set_entity_data")]
|
||||||
pub struct CSetEntityMetadata<T> {
|
pub struct CSetEntityMetadata<T> {
|
||||||
entity_id: VarInt,
|
entity_id: VarInt,
|
||||||
metadata: Metadata<T>,
|
metadata: Metadata<T>,
|
||||||
|
|||||||
@ -3,10 +3,8 @@ use serde::Serialize;
|
|||||||
|
|
||||||
use crate::{SoundCategory, VarInt};
|
use crate::{SoundCategory, VarInt};
|
||||||
|
|
||||||
use super::ClientboundPlayPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundPlayPackets::EntitySoundEffect as i32)]
|
#[client_packet("play:sound_entity")]
|
||||||
pub struct CEntitySoundEffect {
|
pub struct CEntitySoundEffect {
|
||||||
sound_id: VarInt,
|
sound_id: VarInt,
|
||||||
// TODO: add sound from name
|
// TODO: add sound from name
|
||||||
|
|||||||
@ -1,10 +1,8 @@
|
|||||||
use pumpkin_macros::client_packet;
|
use pumpkin_macros::client_packet;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
use super::ClientboundPlayPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundPlayPackets::EntityStatus as i32)]
|
#[client_packet("play:entity_event")]
|
||||||
pub struct CEntityStatus {
|
pub struct CEntityStatus {
|
||||||
entity_id: i32,
|
entity_id: i32,
|
||||||
entity_status: i8,
|
entity_status: i8,
|
||||||
|
|||||||
@ -3,10 +3,8 @@ use serde::Serialize;
|
|||||||
|
|
||||||
use crate::VarInt;
|
use crate::VarInt;
|
||||||
|
|
||||||
use super::ClientboundPlayPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundPlayPackets::EntityVelocity as i32)]
|
#[client_packet("play:set_entity_motion")]
|
||||||
pub struct CEntityVelocity<'a> {
|
pub struct CEntityVelocity<'a> {
|
||||||
entity_id: &'a VarInt,
|
entity_id: &'a VarInt,
|
||||||
velocity_x: i16,
|
velocity_x: i16,
|
||||||
|
|||||||
@ -1,10 +1,8 @@
|
|||||||
use pumpkin_macros::client_packet;
|
use pumpkin_macros::client_packet;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
use super::ClientboundPlayPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundPlayPackets::ChangeGameState as i32)]
|
#[client_packet("play:game_event")]
|
||||||
pub struct CGameEvent {
|
pub struct CGameEvent {
|
||||||
event: u8,
|
event: u8,
|
||||||
value: f32,
|
value: f32,
|
||||||
|
|||||||
@ -3,10 +3,8 @@ use serde::Serialize;
|
|||||||
|
|
||||||
use crate::VarInt;
|
use crate::VarInt;
|
||||||
|
|
||||||
use super::ClientboundPlayPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundPlayPackets::EntityHeadLook as i32)]
|
#[client_packet("play:rotate_head")]
|
||||||
pub struct CHeadRot {
|
pub struct CHeadRot {
|
||||||
entity_id: VarInt,
|
entity_id: VarInt,
|
||||||
head_yaw: u8,
|
head_yaw: u8,
|
||||||
|
|||||||
@ -3,10 +3,8 @@ use serde::Serialize;
|
|||||||
|
|
||||||
use crate::VarInt;
|
use crate::VarInt;
|
||||||
|
|
||||||
use super::ClientboundPlayPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundPlayPackets::HurtAnimation as i32)]
|
#[client_packet("play:hurt_animation")]
|
||||||
pub struct CHurtAnimation<'a> {
|
pub struct CHurtAnimation<'a> {
|
||||||
entity_id: &'a VarInt,
|
entity_id: &'a VarInt,
|
||||||
yaw: f32,
|
yaw: f32,
|
||||||
|
|||||||
@ -3,10 +3,8 @@ use serde::Serialize;
|
|||||||
|
|
||||||
use crate::{VarInt, VarLong};
|
use crate::{VarInt, VarLong};
|
||||||
|
|
||||||
use super::ClientboundPlayPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundPlayPackets::InitializeWorldBorder as i32)]
|
#[client_packet("play:initialize_border")]
|
||||||
pub struct CInitializeWorldBorder {
|
pub struct CInitializeWorldBorder {
|
||||||
x: f64,
|
x: f64,
|
||||||
z: f64,
|
z: f64,
|
||||||
|
|||||||
@ -1,10 +1,8 @@
|
|||||||
use pumpkin_macros::client_packet;
|
use pumpkin_macros::client_packet;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
use super::ClientboundPlayPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundPlayPackets::KeepAlive as i32)]
|
#[client_packet("play:keep_alive")]
|
||||||
pub struct CKeepAlive {
|
pub struct CKeepAlive {
|
||||||
keep_alive_id: i64,
|
keep_alive_id: i64,
|
||||||
}
|
}
|
||||||
|
|||||||
@ -5,10 +5,8 @@ use serde::Serialize;
|
|||||||
|
|
||||||
use crate::VarInt;
|
use crate::VarInt;
|
||||||
|
|
||||||
use super::ClientboundPlayPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundPlayPackets::JoinGame as i32)]
|
#[client_packet("play:login")]
|
||||||
pub struct CLogin<'a> {
|
pub struct CLogin<'a> {
|
||||||
entity_id: i32,
|
entity_id: i32,
|
||||||
is_hardcore: bool,
|
is_hardcore: bool,
|
||||||
|
|||||||
@ -5,10 +5,8 @@ use serde::Serialize;
|
|||||||
|
|
||||||
use crate::VarInt;
|
use crate::VarInt;
|
||||||
|
|
||||||
use super::ClientboundPlayPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundPlayPackets::OpenWindow as i32)]
|
#[client_packet("play:open_screen")]
|
||||||
pub struct COpenScreen<'a> {
|
pub struct COpenScreen<'a> {
|
||||||
window_id: VarInt,
|
window_id: VarInt,
|
||||||
window_type: VarInt,
|
window_type: VarInt,
|
||||||
|
|||||||
@ -3,10 +3,8 @@ use serde::Serialize;
|
|||||||
|
|
||||||
use crate::VarInt;
|
use crate::VarInt;
|
||||||
|
|
||||||
use super::ClientboundPlayPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundPlayPackets::Particle as i32)]
|
#[client_packet("play:level_particles")]
|
||||||
pub struct CParticle<'a> {
|
pub struct CParticle<'a> {
|
||||||
/// If true, particle distance increases from 256 to 65536.
|
/// If true, particle distance increases from 256 to 65536.
|
||||||
long_distance: bool,
|
long_distance: bool,
|
||||||
|
|||||||
@ -1,10 +1,8 @@
|
|||||||
use pumpkin_macros::client_packet;
|
use pumpkin_macros::client_packet;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
use super::ClientboundPlayPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundPlayPackets::Ping as i32)]
|
#[client_packet("play:pong_response")]
|
||||||
pub struct CPingResponse {
|
pub struct CPingResponse {
|
||||||
payload: i64,
|
payload: i64,
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,10 +3,8 @@ use pumpkin_core::text::TextComponent;
|
|||||||
use pumpkin_macros::client_packet;
|
use pumpkin_macros::client_packet;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
use super::ClientboundPlayPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundPlayPackets::Disconnect as i32)]
|
#[client_packet("play:disconnect")]
|
||||||
pub struct CPlayDisconnect<'a> {
|
pub struct CPlayDisconnect<'a> {
|
||||||
reason: &'a TextComponent<'a>,
|
reason: &'a TextComponent<'a>,
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,10 +1,8 @@
|
|||||||
use pumpkin_macros::client_packet;
|
use pumpkin_macros::client_packet;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
use super::ClientboundPlayPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundPlayPackets::PlayerAbilities as i32)]
|
#[client_packet("play:player_abilities")]
|
||||||
pub struct CPlayerAbilities {
|
pub struct CPlayerAbilities {
|
||||||
flags: i8,
|
flags: i8,
|
||||||
flying_speed: f32,
|
flying_speed: f32,
|
||||||
|
|||||||
@ -5,9 +5,8 @@ use serde::Serialize;
|
|||||||
|
|
||||||
use crate::{BitSet, VarInt};
|
use crate::{BitSet, VarInt};
|
||||||
|
|
||||||
use super::ClientboundPlayPackets;
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundPlayPackets::ChatMessage as i32)]
|
#[client_packet("play:player_chat")]
|
||||||
pub struct CPlayerChatMessage<'a> {
|
pub struct CPlayerChatMessage<'a> {
|
||||||
#[serde(with = "uuid::serde::compact")]
|
#[serde(with = "uuid::serde::compact")]
|
||||||
sender: uuid::Uuid,
|
sender: uuid::Uuid,
|
||||||
|
|||||||
@ -2,9 +2,9 @@ use pumpkin_macros::client_packet;
|
|||||||
|
|
||||||
use crate::{bytebuf::ByteBuffer, ClientPacket, Property};
|
use crate::{bytebuf::ByteBuffer, ClientPacket, Property};
|
||||||
|
|
||||||
use super::{ClientboundPlayPackets, PlayerAction};
|
use super::PlayerAction;
|
||||||
|
|
||||||
#[client_packet(ClientboundPlayPackets::PlayerInfoUpdate as i32)]
|
#[client_packet("play:player_info_update")]
|
||||||
pub struct CPlayerInfoUpdate<'a> {
|
pub struct CPlayerInfoUpdate<'a> {
|
||||||
pub actions: i8,
|
pub actions: i8,
|
||||||
pub players: &'a [Player<'a>],
|
pub players: &'a [Player<'a>],
|
||||||
|
|||||||
@ -3,10 +3,8 @@ use serde::{ser::SerializeSeq, Serialize};
|
|||||||
|
|
||||||
use crate::VarInt;
|
use crate::VarInt;
|
||||||
|
|
||||||
use super::ClientboundPlayPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundPlayPackets::PlayerInfoRemove as i32)]
|
#[client_packet("play:player_info_remove")]
|
||||||
pub struct CRemovePlayerInfo<'a> {
|
pub struct CRemovePlayerInfo<'a> {
|
||||||
players_count: VarInt,
|
players_count: VarInt,
|
||||||
#[serde(serialize_with = "serialize_slice_uuids")]
|
#[serde(serialize_with = "serialize_slice_uuids")]
|
||||||
|
|||||||
@ -3,10 +3,8 @@ use serde::Serialize;
|
|||||||
|
|
||||||
use crate::VarInt;
|
use crate::VarInt;
|
||||||
|
|
||||||
use super::ClientboundPlayPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundPlayPackets::DestroyEntities as i32)]
|
#[client_packet("play:remove_entities")]
|
||||||
pub struct CRemoveEntities<'a> {
|
pub struct CRemoveEntities<'a> {
|
||||||
count: VarInt,
|
count: VarInt,
|
||||||
entity_ids: &'a [VarInt],
|
entity_ids: &'a [VarInt],
|
||||||
|
|||||||
@ -1,10 +1,8 @@
|
|||||||
use pumpkin_macros::client_packet;
|
use pumpkin_macros::client_packet;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
use super::ClientboundPlayPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundPlayPackets::ResetScore as i32)]
|
#[client_packet("play:reset_score")]
|
||||||
pub struct CResetScore {
|
pub struct CResetScore {
|
||||||
entity_name: String,
|
entity_name: String,
|
||||||
objective_name: Option<String>,
|
objective_name: Option<String>,
|
||||||
|
|||||||
@ -1,10 +1,8 @@
|
|||||||
use pumpkin_macros::client_packet;
|
use pumpkin_macros::client_packet;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
use super::ClientboundPlayPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundPlayPackets::WorldBorderCenter as i32)]
|
#[client_packet("play:set_border_center")]
|
||||||
pub struct CSetBorderCenter {
|
pub struct CSetBorderCenter {
|
||||||
x: f64,
|
x: f64,
|
||||||
z: f64,
|
z: f64,
|
||||||
|
|||||||
@ -3,10 +3,8 @@ use serde::Serialize;
|
|||||||
|
|
||||||
use crate::VarLong;
|
use crate::VarLong;
|
||||||
|
|
||||||
use super::ClientboundPlayPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundPlayPackets::WorldBorderLerpSize as i32)]
|
#[client_packet("play:set_border_lerp_size")]
|
||||||
pub struct CSetBorderLerpSize {
|
pub struct CSetBorderLerpSize {
|
||||||
old_diameter: f64,
|
old_diameter: f64,
|
||||||
new_diameter: f64,
|
new_diameter: f64,
|
||||||
|
|||||||
@ -1,10 +1,8 @@
|
|||||||
use pumpkin_macros::client_packet;
|
use pumpkin_macros::client_packet;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
use super::ClientboundPlayPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundPlayPackets::WorldBorderSize as i32)]
|
#[client_packet("play:set_border_size")]
|
||||||
pub struct CSetBorderSize {
|
pub struct CSetBorderSize {
|
||||||
diameter: f64,
|
diameter: f64,
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,10 +3,8 @@ use serde::Serialize;
|
|||||||
|
|
||||||
use crate::VarInt;
|
use crate::VarInt;
|
||||||
|
|
||||||
use super::ClientboundPlayPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundPlayPackets::WorldBorderWarningDelay as i32)]
|
#[client_packet("play:set_border_warning_delay")]
|
||||||
pub struct CSetBorderWarningDelay {
|
pub struct CSetBorderWarningDelay {
|
||||||
warning_time: VarInt,
|
warning_time: VarInt,
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,10 +3,8 @@ use serde::Serialize;
|
|||||||
|
|
||||||
use crate::VarInt;
|
use crate::VarInt;
|
||||||
|
|
||||||
use super::ClientboundPlayPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundPlayPackets::WorldBorderWarningReach as i32)]
|
#[client_packet("play:set_border_warning_distance")]
|
||||||
pub struct CSetBorderWarningDistance {
|
pub struct CSetBorderWarningDistance {
|
||||||
warning_blocks: VarInt,
|
warning_blocks: VarInt,
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,10 +4,8 @@ use crate::VarInt;
|
|||||||
use pumpkin_macros::client_packet;
|
use pumpkin_macros::client_packet;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
use super::ClientboundPlayPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundPlayPackets::WindowItems as i32)]
|
#[client_packet("play:container_set_content")]
|
||||||
pub struct CSetContainerContent<'a> {
|
pub struct CSetContainerContent<'a> {
|
||||||
window_id: VarInt,
|
window_id: VarInt,
|
||||||
state_id: VarInt,
|
state_id: VarInt,
|
||||||
|
|||||||
@ -3,9 +3,8 @@ use serde::Serialize;
|
|||||||
|
|
||||||
use crate::VarInt;
|
use crate::VarInt;
|
||||||
|
|
||||||
use super::ClientboundPlayPackets;
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundPlayPackets::WindowProperty as i32)]
|
#[client_packet("play:container_set_data")]
|
||||||
pub struct CSetContainerProperty {
|
pub struct CSetContainerProperty {
|
||||||
window_id: VarInt,
|
window_id: VarInt,
|
||||||
property: i16,
|
property: i16,
|
||||||
|
|||||||
@ -4,9 +4,8 @@ use crate::VarInt;
|
|||||||
use pumpkin_macros::client_packet;
|
use pumpkin_macros::client_packet;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
use super::ClientboundPlayPackets;
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundPlayPackets::SetSlot as i32)]
|
#[client_packet("play:container_set_slot")]
|
||||||
pub struct CSetContainerSlot<'a> {
|
pub struct CSetContainerSlot<'a> {
|
||||||
window_id: i8,
|
window_id: i8,
|
||||||
state_id: VarInt,
|
state_id: VarInt,
|
||||||
|
|||||||
@ -3,10 +3,8 @@ use serde::Serialize;
|
|||||||
|
|
||||||
use crate::VarInt;
|
use crate::VarInt;
|
||||||
|
|
||||||
use super::ClientboundPlayPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundPlayPackets::UpdateHealth as i32)]
|
#[client_packet("play:set_health")]
|
||||||
pub struct CSetHealth {
|
pub struct CSetHealth {
|
||||||
health: f32,
|
health: f32,
|
||||||
food: VarInt,
|
food: VarInt,
|
||||||
|
|||||||
@ -1,10 +1,8 @@
|
|||||||
use pumpkin_macros::client_packet;
|
use pumpkin_macros::client_packet;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
use super::ClientboundPlayPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundPlayPackets::HeldItemChange as i32)]
|
#[client_packet("play:set_held_slot")]
|
||||||
pub struct CSetHeldItem {
|
pub struct CSetHeldItem {
|
||||||
slot: i8,
|
slot: i8,
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,10 +3,8 @@ use pumpkin_core::text::TextComponent;
|
|||||||
use pumpkin_macros::client_packet;
|
use pumpkin_macros::client_packet;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
use super::ClientboundPlayPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundPlayPackets::SetTitleText as i32)]
|
#[client_packet("play:set_title_text")]
|
||||||
pub struct CTitleText<'a> {
|
pub struct CTitleText<'a> {
|
||||||
title: TextComponent<'a>,
|
title: TextComponent<'a>,
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,10 +3,8 @@ use serde::Serialize;
|
|||||||
|
|
||||||
use crate::{SoundCategory, VarInt};
|
use crate::{SoundCategory, VarInt};
|
||||||
|
|
||||||
use super::ClientboundPlayPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundPlayPackets::SoundEffect as i32)]
|
#[client_packet("play:sound")]
|
||||||
pub struct CSoundEffect {
|
pub struct CSoundEffect {
|
||||||
sound_id: VarInt,
|
sound_id: VarInt,
|
||||||
// TODO: add sound from name
|
// TODO: add sound from name
|
||||||
|
|||||||
@ -3,10 +3,8 @@ use serde::Serialize;
|
|||||||
|
|
||||||
use crate::VarInt;
|
use crate::VarInt;
|
||||||
|
|
||||||
use super::ClientboundPlayPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundPlayPackets::SpawnEntity as i32)]
|
#[client_packet("play:add_entity")]
|
||||||
pub struct CSpawnEntity {
|
pub struct CSpawnEntity {
|
||||||
entity_id: VarInt,
|
entity_id: VarInt,
|
||||||
#[serde(with = "uuid::serde::compact")]
|
#[serde(with = "uuid::serde::compact")]
|
||||||
|
|||||||
@ -3,10 +3,8 @@ use pumpkin_core::text::TextComponent;
|
|||||||
use pumpkin_macros::client_packet;
|
use pumpkin_macros::client_packet;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
use super::ClientboundPlayPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundPlayPackets::SetTitleSubtitle as i32)]
|
#[client_packet("play:set_subtitle_text")]
|
||||||
pub struct CSubtitle<'a> {
|
pub struct CSubtitle<'a> {
|
||||||
subtitle: TextComponent<'a>,
|
subtitle: TextComponent<'a>,
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,9 +3,7 @@ use pumpkin_macros::client_packet;
|
|||||||
|
|
||||||
use crate::{ClientPacket, PositionFlag, VarInt};
|
use crate::{ClientPacket, PositionFlag, VarInt};
|
||||||
|
|
||||||
use super::ClientboundPlayPackets;
|
#[client_packet("play:player_position")]
|
||||||
|
|
||||||
#[client_packet(ClientboundPlayPackets::PlayerPositionAndLook as i32)]
|
|
||||||
pub struct CSyncPlayerPosition<'a> {
|
pub struct CSyncPlayerPosition<'a> {
|
||||||
teleport_id: VarInt,
|
teleport_id: VarInt,
|
||||||
x: f64,
|
x: f64,
|
||||||
|
|||||||
@ -3,10 +3,8 @@ use pumpkin_core::text::TextComponent;
|
|||||||
use pumpkin_macros::client_packet;
|
use pumpkin_macros::client_packet;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
use super::ClientboundPlayPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundPlayPackets::SystemChatMessage as i32)]
|
#[client_packet("play:system_chat")]
|
||||||
pub struct CSystemChatMessage<'a> {
|
pub struct CSystemChatMessage<'a> {
|
||||||
content: &'a TextComponent<'a>,
|
content: &'a TextComponent<'a>,
|
||||||
overlay: bool,
|
overlay: bool,
|
||||||
|
|||||||
@ -3,10 +3,8 @@ use serde::Serialize;
|
|||||||
|
|
||||||
use crate::VarInt;
|
use crate::VarInt;
|
||||||
|
|
||||||
use super::ClientboundPlayPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundPlayPackets::EntityTeleport as i32)]
|
#[client_packet("play:teleport_entity")]
|
||||||
pub struct CTeleportEntitiy {
|
pub struct CTeleportEntitiy {
|
||||||
entity_id: VarInt,
|
entity_id: VarInt,
|
||||||
x: f64,
|
x: f64,
|
||||||
|
|||||||
@ -1,10 +1,8 @@
|
|||||||
use pumpkin_macros::client_packet;
|
use pumpkin_macros::client_packet;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
use super::ClientboundPlayPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundPlayPackets::UnloadChunk as i32)]
|
#[client_packet("play:forget_level_chunk")]
|
||||||
pub struct CUnloadChunk {
|
pub struct CUnloadChunk {
|
||||||
z: i32,
|
z: i32,
|
||||||
x: i32,
|
x: i32,
|
||||||
|
|||||||
@ -3,10 +3,8 @@ use serde::Serialize;
|
|||||||
|
|
||||||
use crate::VarInt;
|
use crate::VarInt;
|
||||||
|
|
||||||
use super::ClientboundPlayPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundPlayPackets::EntityRelativeMove as i32)]
|
#[client_packet("play:move_entity_pos")]
|
||||||
pub struct CUpdateEntityPos {
|
pub struct CUpdateEntityPos {
|
||||||
entity_id: VarInt,
|
entity_id: VarInt,
|
||||||
delta_x: i16,
|
delta_x: i16,
|
||||||
|
|||||||
@ -3,10 +3,8 @@ use serde::Serialize;
|
|||||||
|
|
||||||
use crate::VarInt;
|
use crate::VarInt;
|
||||||
|
|
||||||
use super::ClientboundPlayPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundPlayPackets::EntityRelativeMoveAndRotation as i32)]
|
#[client_packet("play:move_entity_pos_rot")]
|
||||||
pub struct CUpdateEntityPosRot {
|
pub struct CUpdateEntityPosRot {
|
||||||
entity_id: VarInt,
|
entity_id: VarInt,
|
||||||
delta_x: i16,
|
delta_x: i16,
|
||||||
|
|||||||
@ -3,10 +3,8 @@ use serde::Serialize;
|
|||||||
|
|
||||||
use crate::VarInt;
|
use crate::VarInt;
|
||||||
|
|
||||||
use super::ClientboundPlayPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundPlayPackets::EntityRotation as i32)]
|
#[client_packet("play:move_entity_rot")]
|
||||||
pub struct CUpdateEntityRot {
|
pub struct CUpdateEntityRot {
|
||||||
entity_id: VarInt,
|
entity_id: VarInt,
|
||||||
yaw: u8,
|
yaw: u8,
|
||||||
|
|||||||
@ -3,9 +3,7 @@ use pumpkin_macros::client_packet;
|
|||||||
|
|
||||||
use crate::{ClientPacket, NumberFormat, VarInt};
|
use crate::{ClientPacket, NumberFormat, VarInt};
|
||||||
|
|
||||||
use super::ClientboundPlayPackets;
|
#[client_packet("play:set_objective")]
|
||||||
|
|
||||||
#[client_packet(ClientboundPlayPackets::ScoreboardObjective as i32)]
|
|
||||||
pub struct CUpdateObjectives<'a> {
|
pub struct CUpdateObjectives<'a> {
|
||||||
objective_name: &'a str,
|
objective_name: &'a str,
|
||||||
mode: u8,
|
mode: u8,
|
||||||
|
|||||||
@ -5,10 +5,8 @@ use serde::Serialize;
|
|||||||
|
|
||||||
use crate::{NumberFormat, VarInt};
|
use crate::{NumberFormat, VarInt};
|
||||||
|
|
||||||
use super::ClientboundPlayPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundPlayPackets::UpdateScore as i32)]
|
#[client_packet("play:set_score")]
|
||||||
pub struct CUpdateScore<'a> {
|
pub struct CUpdateScore<'a> {
|
||||||
entity_name: &'a str,
|
entity_name: &'a str,
|
||||||
objective_name: &'a str,
|
objective_name: &'a str,
|
||||||
|
|||||||
@ -3,10 +3,8 @@ use pumpkin_core::math::position::WorldPosition;
|
|||||||
use pumpkin_macros::client_packet;
|
use pumpkin_macros::client_packet;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
use super::ClientboundPlayPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundPlayPackets::Effect as i32)]
|
#[client_packet("play:level_event")]
|
||||||
pub struct CWorldEvent<'a> {
|
pub struct CWorldEvent<'a> {
|
||||||
event: i32,
|
event: i32,
|
||||||
location: &'a WorldPosition,
|
location: &'a WorldPosition,
|
||||||
|
|||||||
@ -111,142 +111,3 @@ pub use c_update_objectives::*;
|
|||||||
pub use c_update_score::*;
|
pub use c_update_score::*;
|
||||||
pub use c_worldevent::*;
|
pub use c_worldevent::*;
|
||||||
pub use player_action::*;
|
pub use player_action::*;
|
||||||
|
|
||||||
/// DO NOT CHANGE ORDER
|
|
||||||
/// This Enum has the exact order like vanilla, Vanilla parses their Packet IDs from the enum order. Its also way easier to port.
|
|
||||||
#[repr(i32)]
|
|
||||||
pub enum ClientboundPlayPackets {
|
|
||||||
Bundle,
|
|
||||||
SpawnEntity,
|
|
||||||
SpawnExperienceOrb,
|
|
||||||
EntityAnimation,
|
|
||||||
Statistics,
|
|
||||||
AcknowledgeBlockChanges,
|
|
||||||
BlockBreakAnimation,
|
|
||||||
BlockEntityData,
|
|
||||||
BlockAction,
|
|
||||||
BlockChange,
|
|
||||||
BossBar,
|
|
||||||
ServerDifficulty,
|
|
||||||
ChunkBatchEnd,
|
|
||||||
ChunkBatchBegin,
|
|
||||||
ChunkBiomes,
|
|
||||||
ClearTitles,
|
|
||||||
TabComplete,
|
|
||||||
DeclareCommands,
|
|
||||||
CloseWindow,
|
|
||||||
WindowItems,
|
|
||||||
WindowProperty,
|
|
||||||
SetSlot,
|
|
||||||
CookieRequest,
|
|
||||||
SetCooldown,
|
|
||||||
CustomChatCompletions,
|
|
||||||
PluginMessage,
|
|
||||||
DamageEvent,
|
|
||||||
DebugSample,
|
|
||||||
DeleteChat,
|
|
||||||
Disconnect,
|
|
||||||
DisguisedChat,
|
|
||||||
EntityStatus,
|
|
||||||
EntityPositionSync,
|
|
||||||
Explosion,
|
|
||||||
UnloadChunk,
|
|
||||||
ChangeGameState,
|
|
||||||
OpenHorseWindow,
|
|
||||||
HurtAnimation,
|
|
||||||
InitializeWorldBorder,
|
|
||||||
KeepAlive,
|
|
||||||
ChunkData,
|
|
||||||
Effect,
|
|
||||||
Particle,
|
|
||||||
UpdateLight,
|
|
||||||
JoinGame,
|
|
||||||
MapData,
|
|
||||||
MerchantOffers,
|
|
||||||
EntityRelativeMove,
|
|
||||||
EntityRelativeMoveAndRotation,
|
|
||||||
MoveMinecart,
|
|
||||||
EntityRotation,
|
|
||||||
VehicleMove,
|
|
||||||
OpenBook,
|
|
||||||
OpenWindow,
|
|
||||||
OpenSignEditor,
|
|
||||||
Ping,
|
|
||||||
DebugPong,
|
|
||||||
CraftRecipeResponse,
|
|
||||||
PlayerAbilities,
|
|
||||||
ChatMessage,
|
|
||||||
EndCombatEvent,
|
|
||||||
EnterCombatEvent,
|
|
||||||
DeathCombatEvent,
|
|
||||||
PlayerInfoRemove,
|
|
||||||
PlayerInfoUpdate,
|
|
||||||
FacePlayer,
|
|
||||||
PlayerPositionAndLook,
|
|
||||||
PlayerRotation,
|
|
||||||
RecipeBookAdd,
|
|
||||||
RecipeBookRemove,
|
|
||||||
RecipeBookSettings,
|
|
||||||
DestroyEntities,
|
|
||||||
RemoveEntityEffect,
|
|
||||||
ResetScore,
|
|
||||||
ResourcePackRemove,
|
|
||||||
ResourcePackSend,
|
|
||||||
Respawn,
|
|
||||||
EntityHeadLook,
|
|
||||||
MultiBlockChange,
|
|
||||||
SelectAdvancementsTab,
|
|
||||||
ServerData,
|
|
||||||
ActionBar,
|
|
||||||
WorldBorderCenter,
|
|
||||||
WorldBorderLerpSize,
|
|
||||||
WorldBorderSize,
|
|
||||||
WorldBorderWarningDelay,
|
|
||||||
WorldBorderWarningReach,
|
|
||||||
|
|
||||||
Camera,
|
|
||||||
UpdateViewPosition,
|
|
||||||
UpdateViewDistance,
|
|
||||||
SetCursorItem,
|
|
||||||
SpawnPosition,
|
|
||||||
DisplayScoreboard,
|
|
||||||
EntityMetadata,
|
|
||||||
AttachEntity,
|
|
||||||
EntityVelocity,
|
|
||||||
EntityEquipment,
|
|
||||||
SetExperience,
|
|
||||||
UpdateHealth,
|
|
||||||
HeldItemChange,
|
|
||||||
ScoreboardObjective,
|
|
||||||
SetPassengers,
|
|
||||||
SetPlayerInventory,
|
|
||||||
Teams,
|
|
||||||
UpdateScore,
|
|
||||||
UpdateSimulationDistance,
|
|
||||||
SetTitleSubtitle,
|
|
||||||
TimeUpdate,
|
|
||||||
SetTitleText,
|
|
||||||
SetTitleTimes,
|
|
||||||
EntitySoundEffect,
|
|
||||||
SoundEffect,
|
|
||||||
|
|
||||||
ConfigurationStart,
|
|
||||||
StopSound,
|
|
||||||
StoreCookie,
|
|
||||||
SystemChatMessage,
|
|
||||||
PlayerListHeaderAndFooter,
|
|
||||||
NBTQueryResponse,
|
|
||||||
CollectItem,
|
|
||||||
EntityTeleport,
|
|
||||||
TickingState,
|
|
||||||
TickingStep,
|
|
||||||
Transfer,
|
|
||||||
UpdateAdvancements,
|
|
||||||
UpdateAttributes,
|
|
||||||
EntityEffect,
|
|
||||||
DeclareRecipes,
|
|
||||||
Tags,
|
|
||||||
ProjectilePower,
|
|
||||||
CustomReportDetails,
|
|
||||||
ServerLinks,
|
|
||||||
}
|
|
||||||
|
|||||||
@ -1,10 +1,8 @@
|
|||||||
use pumpkin_macros::client_packet;
|
use pumpkin_macros::client_packet;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
use super::ClientboundStatusPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundStatusPackets::PingRequest as i32)]
|
#[client_packet("status:pong_response")]
|
||||||
pub struct CPingResponse {
|
pub struct CPingResponse {
|
||||||
payload: i64, // must responde with the same as in `SPingRequest`
|
payload: i64, // must responde with the same as in `SPingRequest`
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,10 +1,8 @@
|
|||||||
use pumpkin_macros::client_packet;
|
use pumpkin_macros::client_packet;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
use super::ClientboundStatusPackets;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[client_packet(ClientboundStatusPackets::StatusResponse as i32)]
|
#[client_packet("status:status_response")]
|
||||||
pub struct CStatusResponse<'a> {
|
pub struct CStatusResponse<'a> {
|
||||||
json_response: &'a str, // 32767
|
json_response: &'a str, // 32767
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,11 +3,3 @@ mod c_status_response;
|
|||||||
|
|
||||||
pub use c_ping_response::*;
|
pub use c_ping_response::*;
|
||||||
pub use c_status_response::*;
|
pub use c_status_response::*;
|
||||||
|
|
||||||
/// DO NOT CHANGE ORDER
|
|
||||||
/// This Enum has the exact order like vanilla, Vanilla parses their Packet IDs from the enum order. Its also way easier to port.
|
|
||||||
#[repr(i32)]
|
|
||||||
pub enum ClientboundStatusPackets {
|
|
||||||
StatusResponse,
|
|
||||||
PingRequest,
|
|
||||||
}
|
|
||||||
|
|||||||
@ -117,7 +117,7 @@ pub(super) async fn spawn_sweep_particle(
|
|||||||
0.0,
|
0.0,
|
||||||
0.0,
|
0.0,
|
||||||
0,
|
0,
|
||||||
VarInt(particle!("minecraft:sweep_attack") as i32), // sweep
|
VarInt(i32::from(particle!("minecraft:sweep_attack"))), // sweep
|
||||||
&[],
|
&[],
|
||||||
))
|
))
|
||||||
.await;
|
.await;
|
||||||
|
|||||||
@ -108,13 +108,13 @@ impl World {
|
|||||||
|
|
||||||
pub async fn play_sound(
|
pub async fn play_sound(
|
||||||
&self,
|
&self,
|
||||||
sound_id: u32,
|
sound_id: u16,
|
||||||
category: SoundCategory,
|
category: SoundCategory,
|
||||||
posistion: &Vector3<f64>,
|
posistion: &Vector3<f64>,
|
||||||
) {
|
) {
|
||||||
let seed = thread_rng().gen::<f64>();
|
let seed = thread_rng().gen::<f64>();
|
||||||
self.broadcast_packet_all(&CSoundEffect::new(
|
self.broadcast_packet_all(&CSoundEffect::new(
|
||||||
sound_id.into(),
|
VarInt(i32::from(sound_id)),
|
||||||
category,
|
category,
|
||||||
posistion.x,
|
posistion.x,
|
||||||
posistion.y,
|
posistion.y,
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user