2.4 KiB
Pumpkin Protocol
Contains all Serverbound(Client->Server) and Clientbound(Server->Client) Packets.
Packets in the Pumpkin protocol are organized by functionality and state.
server: Contains definitions for serverbound packets.
client: Contains definitions for clientbound packets.
States:
Handshake: Always the first packet being send from the Client. This begins also determins the next state, usally to indicate if the player thans perform a Status Request, Join the Server or wants to be transfered.
Status: Indicates the Client wants to see a Status response (MOTD).
Login: The Login sequence. Indicates the Client wants to join to the Server
Config: A sequence of Configuration packets beining mostly send from the Server to the Client. (Features, Resource Pack, Server Links...)
Play: The final state which indicate the Player is now ready to Join in also used to handle all other Gameplay packets.
How to add a Packet ?
You can find all Minecraft Java packets at https://wiki.vg/Protocol. There you also can see in which State they are. You also can see all the information the Packets has which we can either Write or Read depending if its Serverbound or Clientbound
Adding a Serverbound Packet
Serverbound Packets do use the trait ServerPacket which has an packet id (use hex) and can read incoming Client packets.
https://wiki.vg/Protocol gives you the Packet structure which you can than read. Feel free to orientate on already existing Packets.
Please use a name structure like SPacketName for the struct, The 'S' representing its Serverbound.
Registering: Don't forget to register the Packet. All Packets before the Player is created so before the Play state. Are using the ClientPacketProcessor which calls the packet at Client::handle_packet (both in the pumpkin crate)
Adding a Clientbound Packet
Clientbound Packets do use the trait ClientPacket which has an packet id (use hex) and can write outgoining Server packets.
https://wiki.vg/Protocol gives you the Packet structure which you can than write. Feel free to orientate on already existing Packets.
Please use a name structure like CPacketName for the struct, The 'C' representing its Clientbound.
You don't need to register the Packet anywhere, You should just be able now to send it via Client::send_packet this will get a result. You should kick the client when an important Packet could't been send. Otherwise
just log an warn.