azalea/azalea-protocol
Sculas 41606fdd14
fix: make fields in PlayerInfo::Action public (#32)
This PR makes the fields in the PlayerInfo packet public.

I encountered this issue when writing my own bot which needs a list of UUID > String of all currently logged-in players, and while writing my handler for `Action::RemovePlayer` I found out that the `uuid` field is private. This PR fixes that.
2022-10-19 10:42:38 -05:00
..
azalea-protocol-macros (cargo-release) version 0.2.0 2022-10-17 16:28:53 +00:00
src fix: make fields in PlayerInfo::Action public (#32) 2022-10-19 10:42:38 -05:00
Cargo.toml Create cache file directory if it doesn't exist 2022-10-18 19:31:27 +00:00
README.md Microsoft Authentication (#29) 2022-10-16 22:54:54 -05:00

Azalea Protocol

A low-level crate to send and receive Minecraft packets. You should probably use azalea or azalea-client instead.

The goal is to only support the latest Minecraft version in order to ease development.

This is not yet complete, search for TODO in the code for things that need to be done.

Unfortunately, using azalea-protocol requires Rust nightly because specialization is not stable yet. Use rustup default nightly to enable it.

Adding a new packet

Adding new packets is usually pretty easy, but you'll want to have Minecraft's decompiled source code which you can obtain with tools such as DecompilerMC.

  1. First, you'll need the packet id. You can get this from azalea-protocol error messages or from wiki.vg.
  2. Run python codegen/newpacket.py [packet id] [clientbound or serverbound] \[game/handshake/login/status\]\
  3. Go to the directory where it told you the packet was generated. If there's no comments, you're done. Otherwise, keep going.
  4. Find the packet in Minecraft's source code. Minecraft's packets are in the net/minecraft/network/protocol/<state> directory. The state for your packet is usually game.
  5. Add the fields from Minecraft's source code from either the read or write methods. You can look at wiki.vg if you're not sure about how a packet is structured, but be aware that wiki.vg uses different names for most things.
  6. Format the code, submit a pull request, and wait for it to be reviewed.

Implementing packets

You can manually implement reading and writing functionality for a packet by implementing McBufReadable and McBufWritable, but you can also have this automatically generated for a struct or enum by deriving McBuf.

Look at other packets as an example.