works on 1.19.3 now

This commit is contained in:
TriMill 2022-12-17 00:48:05 -05:00
parent 0f067d6114
commit 8434884747
4 changed files with 27 additions and 28 deletions

View file

@ -3,7 +3,9 @@ use std::{net::{TcpListener, SocketAddr}, thread, sync::mpsc::{Receiver, Sender,
use log::{info, warn, debug}; use log::{info, warn, debug};
use serde_json::json; use serde_json::json;
use crate::{protocol::{data::PacketEncoder, serverbound::*, clientbound::*, command::{Commands, CommandNodeType}}, plugins::{Plugins, Response}, VERSION}; use crate::protocol::{data::PacketEncoder, serverbound::*, clientbound::*, command::Commands, Position};
use crate::plugins::{Plugins, Response};
use crate::VERSION;
use super::{client::NetworkClient, Player}; use super::{client::NetworkClient, Player};
@ -142,7 +144,7 @@ impl <'lua> NetworkServer<'lua> {
ServerBoundPacket::Handshake(_) => (), ServerBoundPacket::Handshake(_) => (),
ServerBoundPacket::StatusRequest() ServerBoundPacket::StatusRequest()
=> client.send_packet(ClientBoundPacket::StatusResponse( => client.send_packet(ClientBoundPacket::StatusResponse(
r#"{"version":{"name":"1.19.2","protocol":760}}"#.to_owned() r#"{"version":{"name":"1.19.3","protocol":761}}"#.to_owned()
))?, ))?,
ServerBoundPacket::PingRequest(n) => { ServerBoundPacket::PingRequest(n) => {
client.send_packet(ClientBoundPacket::PingResponse(n))?; client.send_packet(ClientBoundPacket::PingResponse(n))?;
@ -240,6 +242,9 @@ impl <'lua> NetworkServer<'lua> {
heightmap, heightmap,
chunk_data, chunk_data,
}))?; }))?;
client.send_packet(ClientBoundPacket::SetDefaultSpawnPosition(
Position { x: 0, y: 0, z: 0 }, 0.0
))?;
client.send_packet(ClientBoundPacket::SyncPlayerPosition(SyncPlayerPosition { client.send_packet(ClientBoundPacket::SyncPlayerPosition(SyncPlayerPosition {
x: 0.0, x: 0.0,
y: 64.0, y: 64.0,

View file

@ -153,6 +153,7 @@ pub enum ClientBoundPacket {
KeepAlive(i64), KeepAlive(i64),
PlayerAbilities(i8, f32, f32), PlayerAbilities(i8, f32, f32),
Disconnect(serde_json::Value), Disconnect(serde_json::Value),
SetDefaultSpawnPosition(Position, f32),
SystemChatMessage(serde_json::Value, bool), SystemChatMessage(serde_json::Value, bool),
} }
@ -181,42 +182,47 @@ impl ClientBoundPacket {
// Play // Play
Self::Disconnect(message) => { Self::Disconnect(message) => {
packet.write_string(262144, &message.to_string()); packet.write_string(262144, &message.to_string());
finalize_packet(packet, 25) finalize_packet(packet, 23)
} }
Self::LoginPlay(login_play) => { Self::LoginPlay(login_play) => {
login_play.encode(&mut packet); login_play.encode(&mut packet);
finalize_packet(packet, 37) finalize_packet(packet, 36)
} }
Self::PluginMessage(plugin_message) => { Self::PluginMessage(plugin_message) => {
plugin_message.encode(&mut packet); plugin_message.encode(&mut packet);
finalize_packet(packet, 22) finalize_packet(packet, 21)
} }
Self::Commands(commands) => { Self::Commands(commands) => {
commands.encode(&mut packet); commands.encode(&mut packet);
finalize_packet(packet, 15) finalize_packet(packet, 14)
} }
Self::ChunkData(chunk_data) => { Self::ChunkData(chunk_data) => {
chunk_data.encode(&mut packet); chunk_data.encode(&mut packet);
finalize_packet(packet, 33) finalize_packet(packet, 32)
} }
Self::SyncPlayerPosition(sync_player_position) => { Self::SyncPlayerPosition(sync_player_position) => {
sync_player_position.encode(&mut packet); sync_player_position.encode(&mut packet);
finalize_packet(packet, 57) finalize_packet(packet, 56)
} }
Self::KeepAlive(n) => { Self::KeepAlive(n) => {
packet.write_long(n); packet.write_long(n);
finalize_packet(packet, 32) finalize_packet(packet, 31)
}
Self::SetDefaultSpawnPosition(pos, angle) => {
packet.write_position(pos);
packet.write_float(angle);
finalize_packet(packet, 76)
} }
Self::PlayerAbilities(flags, speed, view) => { Self::PlayerAbilities(flags, speed, view) => {
packet.write_byte(flags); packet.write_byte(flags);
packet.write_float(speed); packet.write_float(speed);
packet.write_float(view); packet.write_float(view);
finalize_packet(packet, 49) finalize_packet(packet, 48)
} }
Self::SystemChatMessage(msg, overlay) => { Self::SystemChatMessage(msg, overlay) => {
packet.write_string(262144, &msg.to_string()); packet.write_string(262144, &msg.to_string());
packet.write_bool(overlay); packet.write_bool(overlay);
finalize_packet(packet, 98) finalize_packet(packet, 96)
} }
} }
} }

View file

@ -14,7 +14,7 @@ pub enum NetworkState {
#[derive(Clone, Copy, Debug)] #[derive(Clone, Copy, Debug)]
pub struct Position { pub struct Position {
x: i32, pub x: i32,
y: i16, pub y: i16,
z: i32 pub z: i32
} }

View file

@ -30,30 +30,18 @@ pub struct SigData {
#[derive(Debug)] #[derive(Debug)]
pub struct LoginStart { pub struct LoginStart {
pub name: String, pub name: String,
pub sig_data: Option<SigData>,
pub uuid: Uuid, pub uuid: Uuid,
} }
impl LoginStart { impl LoginStart {
pub fn decode(mut decoder: PacketDecoder) -> Self { pub fn decode(mut decoder: PacketDecoder) -> Self {
let name = decoder.read_string(); let name = decoder.read_string();
let has_sig_data = decoder.read_bool();
let sig_data = if has_sig_data {
let timestamp = decoder.read_long();
let pubkey_len = decoder.read_varint();
let pubkey = decoder.read_bytes(pubkey_len as usize).to_vec();
let sig_len = decoder.read_varint();
let sig = decoder.read_bytes(sig_len as usize).to_vec();
Some(SigData { timestamp, pubkey, sig })
} else {
None
};
let has_uuid = decoder.read_bool(); let has_uuid = decoder.read_bool();
if !has_uuid { if !has_uuid {
panic!("Client didn't supply UUID"); panic!("Client didn't supply UUID");
} }
let uuid = decoder.read_uuid(); let uuid = decoder.read_uuid();
Self { name, sig_data, uuid } Self { name, uuid }
} }
} }
@ -111,7 +99,7 @@ impl ServerBoundPacket {
}, },
(NS::Play, 4) => ServerBoundPacket::ChatCommand(ChatMessage::decode(decoder)), (NS::Play, 4) => ServerBoundPacket::ChatCommand(ChatMessage::decode(decoder)),
(NS::Play, 5) => ServerBoundPacket::ChatMessage(ChatMessage::decode(decoder)), (NS::Play, 5) => ServerBoundPacket::ChatMessage(ChatMessage::decode(decoder)),
(NS::Play, id @ (18 | 20 | 21 | 22 | 30)) => ServerBoundPacket::Ignored(id), (NS::Play, id @ (17 | 19 | 20 | 21 | 29)) => ServerBoundPacket::Ignored(id),
(_, id) => ServerBoundPacket::Unknown(id), (_, id) => ServerBoundPacket::Unknown(id),
} }
} }