* start adding azalea-inventory * design more of how inventories are defined * start working on az-inv-macros * inventory macro works * start adding inventory codegen * update some deps * add inventory codegen * manually write inventory menus * put the inventories in Client * start on containersetcontent * inventory menu should hopefully work * checks in containersetcontent * format a comment * move some variant matches * inventory.rs * inventory stuff * more inventory stuff * inventory/container tracking works * start adding interact function * sequence number * start adding HitResultComponent * implement traverse_blocks * start adding clip * add clip function * update_hit_result_component * start trying to fix * fix * make some stuff simpler * clippy * lever * chest * container handle * fix ambiguity * fix some doc tests * move some container stuff from az-client to azalea * clicking container * start implementing simulate_click * keep working on simulate click * implement more of simulate_click this is really boring * inventory fixes * start implementing shift clicking * fix panic in azalea-chat i hope * shift clicking implemented * more inventory stuff * fix items not showing in containers sometimes * fix test * fix all warnings * remove a println --------- Co-authored-by: mat <git@matdoes.dev> |
||
---|---|---|
.. | ||
azalea-protocol-macros | ||
examples | ||
src | ||
Cargo.toml | ||
README.md |
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.
- First, you'll need the packet id. You can get this from azalea-protocol error messages or from wiki.vg.
- Run
python codegen/newpacket.py [packet id] [clientbound or serverbound] \[game/handshake/login/status\]
\ - Go to the directory where it told you the packet was generated. If there's no comments, you're done. Otherwise, keep going.
- 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 usuallygame
. - 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.
- 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.