diff --git a/minecraft-protocol/src/packets/client_intention_packet.rs b/minecraft-protocol/src/packets/client_intention_packet.rs index fdbd9468..a9a4d86a 100644 --- a/minecraft-protocol/src/packets/client_intention_packet.rs +++ b/minecraft-protocol/src/packets/client_intention_packet.rs @@ -1,16 +1,22 @@ +use std::hash::Hash; + use crate::friendly_byte_buf::FriendlyByteBuf; use super::{ConnectionProtocol, Packet}; +#[derive(Hash)] pub struct ClientIntentionPacket { protocol_version: u32, hostname: String, port: u16, + /// 1 for status, 2 for login intention: ConnectionProtocol, } // implement "Packet" for "ClientIntentionPacket" impl Packet for ClientIntentionPacket { + const ID: u8 = 0x00; + // implement "from_reader" for "ClientIntentionPacket" fn write(&self, buf: &mut FriendlyByteBuf) { buf.write_varint(self.protocol_version); @@ -19,3 +25,4 @@ impl Packet for ClientIntentionPacket { buf.write_varint(self.intention.clone() as u32); } } + diff --git a/minecraft-protocol/src/packets/mod.rs b/minecraft-protocol/src/packets/mod.rs index 530a1b4b..2ccdeb44 100644 --- a/minecraft-protocol/src/packets/mod.rs +++ b/minecraft-protocol/src/packets/mod.rs @@ -1,8 +1,10 @@ pub mod client_intention_packet; +use std::collections::HashMap; + use crate::friendly_byte_buf::FriendlyByteBuf; -#[derive(Debug, Clone, PartialEq)] +#[derive(Debug, Clone, PartialEq, Eq, Hash)] pub enum ConnectionProtocol { Handshaking = -1, Play = 0, @@ -11,17 +13,9 @@ pub enum ConnectionProtocol { } pub trait Packet { + /// The id of the packet, this is always a byte in vanilla. + /// This might be bigger than a u8 if using modpacks with lots of custom packets? + const ID: u8; + fn write(&self, friendly_byte_buf: &mut FriendlyByteBuf) -> (); } - -struct PacketSet<'a> { - pub packets: Vec<&'a dyn Packet>, -} - -impl<'a> PacketSet<'a> { - fn add_packet(&mut self, packet: &'a dyn Packet) { - self.packets.push(packet); - } -} - -// PacketSet