* start adding shapes * add more collision stuff * DiscreteCubeMerger * more mergers * start adding BitSetDiscreteVoxelShape::join * i love rust 😃 😃 😃 * r * IT COMPILES???? * fix warning * fix error * fix more clippy issues * add box_shape * more shape stuff * make DiscreteVoxelShape an enum * Update shape.rs * also make VoxelShape an enum * implement BitSet::clear * add more missing things * it compiles W * start block shape codegen * optimize shape codegen * make az-block/blocks.rs look better (broken) * almost new block macro * make the codegen not generate 'type' * try to fix * work more on the blocks macro * wait it compiles * fix clippy issues * shapes codegen works * well it's almost working * simplify some shape codegen * enum type names are correct * W it compiles * cargo check no longer warns * fix some clippy issues * start making it so the shape impl is on BlockStates * insane code * new impl compiles * fix wrong find_bits + TESTS PASS! * add a test for slab collision * fix clippy issues * ok rust * fix error that happens when on stairs * add test for top slabs * start adding join_is_not_empty * add more to join_is_not_empty * top slabs still don't work!! * x..=0 doesn't work in rust 😃 😃 😃 😃 😃 😃 😃 😃 😃 😃 😃 😃 😃 😃 * remove comment since i added more useful names * remove some printlns * fix walls in some configurations erroring * fix some warnings * change comment to \`\`\`ignore instead of \`\`\`no_run * players are .6 wide not .8 * fix clippy's complaints * i missed one clippy warning |
||
---|---|---|
.. | ||
azalea-protocol-macros | ||
src | ||
Cargo.toml | ||
README.md |
Azalea Protocol
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.