fix: SEmote packet
This commit is contained in:
parent
92658f5853
commit
b18c26ccb4
@ -11,8 +11,8 @@ pub const EMOTE_FLAG_MUTE_CHAT: u8 = 1 << 1;
|
|||||||
#[packet(138)]
|
#[packet(138)]
|
||||||
pub struct SEmote<'a> {
|
pub struct SEmote<'a> {
|
||||||
pub runtime_entity_id: VarULong,
|
pub runtime_entity_id: VarULong,
|
||||||
pub emote_id: Cow<'a, str>,
|
|
||||||
pub emote_length: VarUInt,
|
pub emote_length: VarUInt,
|
||||||
|
pub emote_id: Cow<'a, str>,
|
||||||
pub xuid: Cow<'a, str>,
|
pub xuid: Cow<'a, str>,
|
||||||
pub platform_id: Cow<'a, str>,
|
pub platform_id: Cow<'a, str>,
|
||||||
pub flags: u8,
|
pub flags: u8,
|
||||||
@ -21,15 +21,15 @@ pub struct SEmote<'a> {
|
|||||||
impl<'a> PacketReadSlice<'a> for SEmote<'a> {
|
impl<'a> PacketReadSlice<'a> for SEmote<'a> {
|
||||||
fn read_slice(buf: &mut &'a [u8]) -> Result<Self, Error> {
|
fn read_slice(buf: &mut &'a [u8]) -> Result<Self, Error> {
|
||||||
let runtime_entity_id = VarULong::read_slice(buf)?;
|
let runtime_entity_id = VarULong::read_slice(buf)?;
|
||||||
let emote_id = Cow::Borrowed(read_str_slice(buf)?);
|
|
||||||
let emote_length = VarUInt::read_slice(buf)?;
|
let emote_length = VarUInt::read_slice(buf)?;
|
||||||
|
let emote_id = Cow::Borrowed(read_str_slice(buf)?);
|
||||||
let xuid = Cow::Borrowed(read_str_slice(buf)?);
|
let xuid = Cow::Borrowed(read_str_slice(buf)?);
|
||||||
let platform_id = Cow::Borrowed(read_str_slice(buf)?);
|
let platform_id = Cow::Borrowed(read_str_slice(buf)?);
|
||||||
let flags = u8::read_slice(buf)?;
|
let flags = u8::read_slice(buf)?;
|
||||||
Ok(Self {
|
Ok(Self {
|
||||||
runtime_entity_id,
|
runtime_entity_id,
|
||||||
emote_id,
|
|
||||||
emote_length,
|
emote_length,
|
||||||
|
emote_id,
|
||||||
xuid,
|
xuid,
|
||||||
platform_id,
|
platform_id,
|
||||||
flags,
|
flags,
|
||||||
@ -41,8 +41,8 @@ impl PacketRead for SEmote<'static> {
|
|||||||
fn read<R: std::io::Read>(reader: &mut R) -> Result<Self, Error> {
|
fn read<R: std::io::Read>(reader: &mut R) -> Result<Self, Error> {
|
||||||
Ok(Self {
|
Ok(Self {
|
||||||
runtime_entity_id: VarULong::read(reader)?,
|
runtime_entity_id: VarULong::read(reader)?,
|
||||||
emote_id: Cow::Owned(String::read(reader)?),
|
|
||||||
emote_length: VarUInt::read(reader)?,
|
emote_length: VarUInt::read(reader)?,
|
||||||
|
emote_id: Cow::Owned(String::read(reader)?),
|
||||||
xuid: Cow::Owned(String::read(reader)?),
|
xuid: Cow::Owned(String::read(reader)?),
|
||||||
platform_id: Cow::Owned(String::read(reader)?),
|
platform_id: Cow::Owned(String::read(reader)?),
|
||||||
flags: u8::read(reader)?,
|
flags: u8::read(reader)?,
|
||||||
@ -53,8 +53,8 @@ impl PacketRead for SEmote<'static> {
|
|||||||
impl PacketWrite for SEmote<'_> {
|
impl PacketWrite for SEmote<'_> {
|
||||||
fn write<W: Write>(&self, writer: &mut W) -> Result<(), Error> {
|
fn write<W: Write>(&self, writer: &mut W) -> Result<(), Error> {
|
||||||
self.runtime_entity_id.write(writer)?;
|
self.runtime_entity_id.write(writer)?;
|
||||||
self.emote_id.as_ref().write(writer)?;
|
|
||||||
self.emote_length.write(writer)?;
|
self.emote_length.write(writer)?;
|
||||||
|
self.emote_id.as_ref().write(writer)?;
|
||||||
self.xuid.as_ref().write(writer)?;
|
self.xuid.as_ref().write(writer)?;
|
||||||
self.platform_id.as_ref().write(writer)?;
|
self.platform_id.as_ref().write(writer)?;
|
||||||
self.flags.write(writer)
|
self.flags.write(writer)
|
||||||
|
|||||||
@ -26,9 +26,9 @@ use pumpkin_protocol::{
|
|||||||
server::{
|
server::{
|
||||||
animate::SAnimate, block_pick_request::SBlockPickRequest,
|
animate::SAnimate, block_pick_request::SBlockPickRequest,
|
||||||
client_cache_status::SClientCacheStatus, command_request::SCommandRequest,
|
client_cache_status::SClientCacheStatus, command_request::SCommandRequest,
|
||||||
container_close::SContainerClose, emote::SEmote, interaction::SInteraction,
|
container_close::SContainerClose, emote::SEmote, emote_list::SEmoteList,
|
||||||
inventory_transaction::SInventoryTransaction, loading_screen::SLoadingScreen,
|
interaction::SInteraction, inventory_transaction::SInventoryTransaction,
|
||||||
login::SLogin, mob_equipment::SMobEquipment,
|
loading_screen::SLoadingScreen, login::SLogin, mob_equipment::SMobEquipment,
|
||||||
packet_violation_warning::SPacketViolationWarning, player_action::SPlayerAction,
|
packet_violation_warning::SPacketViolationWarning, player_action::SPlayerAction,
|
||||||
player_auth_input::SPlayerAuthInput, request_ability::SRequestAbility,
|
player_auth_input::SPlayerAuthInput, request_ability::SRequestAbility,
|
||||||
request_chunk_radius::SRequestChunkRadius,
|
request_chunk_radius::SRequestChunkRadius,
|
||||||
@ -624,6 +624,7 @@ impl BedrockClient {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(clippy::too_many_lines)]
|
||||||
pub async fn handle_play_packet(
|
pub async fn handle_play_packet(
|
||||||
&self,
|
&self,
|
||||||
player: &Arc<Player>,
|
player: &Arc<Player>,
|
||||||
@ -690,9 +691,9 @@ impl BedrockClient {
|
|||||||
SEmote::PACKET_ID => {
|
SEmote::PACKET_ID => {
|
||||||
self.handle_emote(player, server, SEmote::read_slice(reader)?).await;
|
self.handle_emote(player, server, SEmote::read_slice(reader)?).await;
|
||||||
}
|
}
|
||||||
// SEmoteList::PACKET_ID => {
|
SEmoteList::PACKET_ID => {
|
||||||
// self.handle_emote_list(player, server, SEmoteList::read(reader)?);
|
self.handle_emote_list(player, server, &SEmoteList::read(reader)?);
|
||||||
// }
|
}
|
||||||
pumpkin_protocol::bedrock::server::modal_form_response::SModalFormResponse::PACKET_ID => {
|
pumpkin_protocol::bedrock::server::modal_form_response::SModalFormResponse::PACKET_ID => {
|
||||||
self.handle_modal_form_response(
|
self.handle_modal_form_response(
|
||||||
player,
|
player,
|
||||||
|
|||||||
@ -28,6 +28,7 @@ use pumpkin_protocol::{
|
|||||||
command_request::SCommandRequest,
|
command_request::SCommandRequest,
|
||||||
container_close::SContainerClose,
|
container_close::SContainerClose,
|
||||||
emote::SEmote,
|
emote::SEmote,
|
||||||
|
emote_list::SEmoteList,
|
||||||
interaction::{Action, SInteraction},
|
interaction::{Action, SInteraction},
|
||||||
inventory_transaction::{SInventoryTransaction, TransactionData},
|
inventory_transaction::{SInventoryTransaction, TransactionData},
|
||||||
mob_equipment::SMobEquipment,
|
mob_equipment::SMobEquipment,
|
||||||
@ -463,10 +464,17 @@ impl BedrockClient {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tracing::info!(
|
||||||
|
"handle_emote: player={} packet={:?}",
|
||||||
|
player.gameprofile.name,
|
||||||
|
packet
|
||||||
|
);
|
||||||
|
|
||||||
let entity = &player.living_entity.entity;
|
let entity = &player.living_entity.entity;
|
||||||
let world = entity.world.load();
|
let world = entity.world.load();
|
||||||
|
|
||||||
let mut broadcast_packet = packet;
|
let mut broadcast_packet = packet;
|
||||||
|
broadcast_packet.runtime_entity_id = VarULong(entity.entity_id as u64);
|
||||||
broadcast_packet.flags |= pumpkin_protocol::bedrock::server::emote::EMOTE_FLAG_SERVER_SIDE;
|
broadcast_packet.flags |= pumpkin_protocol::bedrock::server::emote::EMOTE_FLAG_SERVER_SIDE;
|
||||||
|
|
||||||
world
|
world
|
||||||
@ -481,17 +489,13 @@ impl BedrockClient {
|
|||||||
.await;
|
.await;
|
||||||
}
|
}
|
||||||
|
|
||||||
// pub fn handle_emote_list(
|
pub fn handle_emote_list(&self, player: &Arc<Player>, _server: &Server, packet: &SEmoteList) {
|
||||||
// &self,
|
tracing::info!(
|
||||||
// player: &Arc<Player>,
|
"handle_emote_list: player={} packet={:?}",
|
||||||
// _server: &Server,
|
player.gameprofile.name,
|
||||||
// packet: &SEmoteList,
|
packet
|
||||||
// ) {
|
);
|
||||||
// debug!(
|
}
|
||||||
// "Player {} sent emote list: {:?}",
|
|
||||||
// player.gameprofile.name, packet.emote_pieces
|
|
||||||
// );
|
|
||||||
// }
|
|
||||||
|
|
||||||
#[allow(clippy::too_many_lines, clippy::collapsible_if, clippy::unreachable)]
|
#[allow(clippy::too_many_lines, clippy::collapsible_if, clippy::unreachable)]
|
||||||
pub async fn handle_inventory_action(
|
pub async fn handle_inventory_action(
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user