Add Play Ping/Pong

Used for Debug, F3+3
This commit is contained in:
Snowiiii 2024-08-20 18:07:22 +02:00
parent 5122097d0d
commit 938a415f77
8 changed files with 47 additions and 12 deletions

View File

@ -0,0 +1,14 @@
use pumpkin_macros::packet;
use serde::Serialize;
#[derive(Serialize)]
#[packet(0x36)]
pub struct CPingResponse {
payload: i64,
}
impl CPingResponse {
pub fn new(payload: i64) -> Self {
Self { payload }
}
}

View File

@ -15,6 +15,7 @@ mod c_hurt_animation;
mod c_login; mod c_login;
mod c_open_screen; mod c_open_screen;
mod c_particle; mod c_particle;
mod c_ping_response;
mod c_play_disconnect; mod c_play_disconnect;
mod c_player_abilities; mod c_player_abilities;
mod c_player_chat_message; mod c_player_chat_message;
@ -50,6 +51,7 @@ pub use c_hurt_animation::*;
pub use c_login::*; pub use c_login::*;
pub use c_open_screen::*; pub use c_open_screen::*;
pub use c_particle::*; pub use c_particle::*;
pub use c_ping_response::*;
pub use c_play_disconnect::*; pub use c_play_disconnect::*;
pub use c_player_abilities::*; pub use c_player_abilities::*;
pub use c_player_chat_message::*; pub use c_player_chat_message::*;

View File

@ -3,6 +3,7 @@ mod s_chat_message;
mod s_client_information; mod s_client_information;
mod s_confirm_teleport; mod s_confirm_teleport;
mod s_interact; mod s_interact;
mod s_ping_request;
mod s_player_action; mod s_player_action;
mod s_player_command; mod s_player_command;
mod s_player_position; mod s_player_position;
@ -18,6 +19,7 @@ pub use s_chat_message::*;
pub use s_client_information::*; pub use s_client_information::*;
pub use s_confirm_teleport::*; pub use s_confirm_teleport::*;
pub use s_interact::*; pub use s_interact::*;
pub use s_ping_request::*;
pub use s_player_action::*; pub use s_player_action::*;
pub use s_player_command::*; pub use s_player_command::*;
pub use s_player_position::*; pub use s_player_position::*;

View File

@ -0,0 +1,8 @@
use pumpkin_macros::packet;
use serde::Deserialize;
#[derive(Deserialize)]
#[packet(0x21)]
pub struct SPlayPingRequest {
pub payload: i64,
}

View File

@ -2,6 +2,6 @@ use pumpkin_macros::packet;
#[derive(serde::Deserialize)] #[derive(serde::Deserialize)]
#[packet(0x01)] #[packet(0x01)]
pub struct SPingRequest { pub struct SStatusPingRequest {
pub payload: i64, pub payload: i64,
} }

View File

@ -9,7 +9,7 @@ use pumpkin_protocol::{
config::{SAcknowledgeFinishConfig, SClientInformationConfig, SKnownPacks, SPluginMessage}, config::{SAcknowledgeFinishConfig, SClientInformationConfig, SKnownPacks, SPluginMessage},
handshake::SHandShake, handshake::SHandShake,
login::{SEncryptionResponse, SLoginAcknowledged, SLoginPluginResponse, SLoginStart}, login::{SEncryptionResponse, SLoginAcknowledged, SLoginPluginResponse, SLoginStart},
status::{SPingRequest, SStatusRequest}, status::{SStatusPingRequest, SStatusRequest},
}, },
ConnectionState, KnownPack, CURRENT_MC_PROTOCOL, ConnectionState, KnownPack, CURRENT_MC_PROTOCOL,
}; };
@ -54,7 +54,7 @@ impl Client {
self.send_packet(&CStatusResponse::new(&server.status_response_json)); self.send_packet(&CStatusResponse::new(&server.status_response_json));
} }
pub fn handle_ping_request(&mut self, _server: &mut Server, ping_request: SPingRequest) { pub fn handle_ping_request(&mut self, _server: &mut Server, ping_request: SStatusPingRequest) {
dbg!("ping"); dbg!("ping");
self.send_packet(&CPingResponse::new(ping_request.payload)); self.send_packet(&CPingResponse::new(ping_request.payload));
self.close(); self.close();

View File

@ -28,10 +28,11 @@ use pumpkin_protocol::{
login::{SEncryptionResponse, SLoginAcknowledged, SLoginPluginResponse, SLoginStart}, login::{SEncryptionResponse, SLoginAcknowledged, SLoginPluginResponse, SLoginStart},
play::{ play::{
SChatCommand, SChatMessage, SClientInformationPlay, SConfirmTeleport, SInteract, SChatCommand, SChatMessage, SClientInformationPlay, SConfirmTeleport, SInteract,
SPlayerAction, SPlayerCommand, SPlayerPosition, SPlayerPositionRotation, SPlayPingRequest, SPlayerAction, SPlayerCommand, SPlayerPosition,
SPlayerRotation, SSetCreativeSlot, SSetHeldItem, SSwingArm, SUseItemOn, SPlayerPositionRotation, SPlayerRotation, SSetCreativeSlot, SSetHeldItem, SSwingArm,
SUseItemOn,
}, },
status::{SPingRequest, SStatusRequest}, status::{SStatusPingRequest, SStatusRequest},
}, },
ClientPacket, ConnectionState, PacketError, RawPacket, ServerPacket, ClientPacket, ConnectionState, PacketError, RawPacket, ServerPacket,
}; };
@ -201,8 +202,8 @@ impl Client {
SStatusRequest::PACKET_ID => { SStatusRequest::PACKET_ID => {
self.handle_status_request(server, SStatusRequest::read(bytebuf).unwrap()) self.handle_status_request(server, SStatusRequest::read(bytebuf).unwrap())
} }
SPingRequest::PACKET_ID => { SStatusPingRequest::PACKET_ID => {
self.handle_ping_request(server, SPingRequest::read(bytebuf).unwrap()) self.handle_ping_request(server, SStatusPingRequest::read(bytebuf).unwrap())
} }
_ => log::error!( _ => log::error!(
"Failed to handle packet id {} while in Status state", "Failed to handle packet id {} while in Status state",
@ -307,6 +308,9 @@ impl Client {
SSetCreativeSlot::PACKET_ID => { SSetCreativeSlot::PACKET_ID => {
self.handle_set_creative_slot(server, SSetCreativeSlot::read(bytebuf).unwrap()) self.handle_set_creative_slot(server, SSetCreativeSlot::read(bytebuf).unwrap())
} }
SPlayPingRequest::PACKET_ID => {
self.handle_play_ping_request(server, SPlayPingRequest::read(bytebuf).unwrap())
}
_ => log::error!("Failed to handle player packet id {}", packet.id.0), _ => log::error!("Failed to handle player packet id {}", packet.id.0),
} }
} }

View File

@ -11,14 +11,15 @@ use pumpkin_entity::EntityId;
use pumpkin_protocol::{ use pumpkin_protocol::{
client::play::{ client::play::{
Animation, CAcknowledgeBlockChange, CBlockUpdate, CEntityAnimation, CEntityVelocity, Animation, CAcknowledgeBlockChange, CBlockUpdate, CEntityAnimation, CEntityVelocity,
CHeadRot, CHurtAnimation, CPlayerChatMessage, CUpdateEntityPos, CUpdateEntityPosRot, CHeadRot, CHurtAnimation, CPingResponse, CPlayerChatMessage, CUpdateEntityPos,
CUpdateEntityRot, CWorldEvent, FilterType, CUpdateEntityPosRot, CUpdateEntityRot, CWorldEvent, FilterType,
}, },
position::WorldPosition, position::WorldPosition,
server::play::{ server::play::{
Action, ActionType, SChatCommand, SChatMessage, SClientInformationPlay, SConfirmTeleport, Action, ActionType, SChatCommand, SChatMessage, SClientInformationPlay, SConfirmTeleport,
SInteract, SPlayerAction, SPlayerCommand, SPlayerPosition, SPlayerPositionRotation, SInteract, SPlayPingRequest, SPlayerAction, SPlayerCommand, SPlayerPosition,
SPlayerRotation, SSetCreativeSlot, SSetHeldItem, SSwingArm, SUseItemOn, Status, SPlayerPositionRotation, SPlayerRotation, SSetCreativeSlot, SSetHeldItem, SSwingArm,
SUseItemOn, Status,
}, },
}; };
use pumpkin_text::TextComponent; use pumpkin_text::TextComponent;
@ -361,6 +362,10 @@ impl Client {
} }
} }
pub fn handle_play_ping_request(&mut self, _server: &mut Server, request: SPlayPingRequest) {
self.send_packet(&CPingResponse::new(request.payload));
}
pub fn handle_use_item_on(&mut self, server: &mut Server, use_item_on: SUseItemOn) { pub fn handle_use_item_on(&mut self, server: &mut Server, use_item_on: SUseItemOn) {
self.send_packet(&CAcknowledgeBlockChange::new(use_item_on.sequence)); self.send_packet(&CAcknowledgeBlockChange::new(use_item_on.sequence));