mirror of
https://github.com/mat-1/azalea.git
synced 2025-08-02 14:26:04 +00:00
* start updating to 1.21.4 * fix block codegen and stop using block data from burger * rename packet related modules and structs to be simpler * ItemSlot -> ItemStack for more consistency with mojmap * .get() -> .into_packet() * simplify declare_state_packets by removing packet ids * rename read_from and write_into to azalea_read and azalea_write * rename McBufReadable and McBufWritable to AzaleaRead and AzaleaWrite * McBuf -> AzBuf * remove most uses of into_variant * update codegen and use resourcelocation names for packets * implement #[limit(i)] attribute for AzBuf derive macro * fixes for 1.21.4 * fix examples * update some physics code and fix ChatType * remove unused imports in codegen * re-add some things to migrate.py and update +mc version numbers automatically * downgrade to 1.21.3 lol
26 lines
1.8 KiB
Markdown
Executable file
26 lines
1.8 KiB
Markdown
Executable file
# 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](https://github.com/rust-lang/rust/issues/31844) 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](https://github.com/hube12/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](https://wiki.vg/Protocol) 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 AzaleaRead and AzaleaWrite, but you can also have this automatically generated for a struct or enum by deriving AzBuf.
|
|
|
|
Look at other packets as an example.
|