azalea/codegen
mat 7d901e39bc
1.19.3 (#34)
* start updating to 22w42a

* work a bit more on 22w42a

* player chat packet

* serverbound hello packet

* Update mod.rs

* add more stuff to clientbound player chat packet

* ClientboundPlayerInfoUpdatePacket

* features enabled and container closed

* serverbound chat packets

* make it compile

* 22w43a

* ServerboundChatSessionUpdatePacket

* profile_public_key isn't Option anymore

* Update bitset.rs

* joining a server works

* fix entitydatavalue

* backtraces + fix clientbound chat message

* fix some warnings and add more ecomments

* 22w44a

* generate en_us.json

* add updating guide to codegen/readme

* fix some markdown

* update list of generated things

* metadata stuff

* Replace PJS generator mod with PixLyzer (#38)

* pixlizer extractor

* start working on shape extraction

* fix generating language

* fix pixlyzer shape generation

* use empty_shape

* generate blocks and shapes

* update pixlyzer dir

* Revert "update pixlyzer dir"

This reverts commit ee9a0e7a49.

* fix

* fix

* Revert "fix"

This reverts commit ad12ddcb00.

* fix

* detect pixlyzer fail

* fix pixlyzer

* 22w45a

* gen entities

* add async-trait dep

* update codegen/readme.md

* explain when rust_log should be used

* remove some unused code

* start fixing pixlyzer issues

* fix a thing in codegen

* almost fixed

* more progress towards 1.19.3

* 1.19.3-pre2

* fixes

* revert some hardcoded property names

* Delete clientbound_player_info_packet.rs

* handle 1.19.3 player info packets

* handle playerinforemove

* start updating to 1.19.3-rc1

* optional registries work

* fix some issues with 1.19.3

chat doesn't work yet

* aaaaaaaaaaaaaaaaa

* oh

* ignore unused shapes

* uncomment generate_blocks

* fix migrate

* 1.19.3-rc2

* fix clippy warnings

* 1.19.3-rc3

* split the azalea-buf macro into separate modules

* improve Recipe in protocol

* 1.19.3
2022-12-07 21:09:58 -06:00
..
lib 1.19.3 (#34) 2022-12-07 21:09:58 -06:00
.gitignore Pathfinder (#25) 2022-11-12 23:54:05 -06:00
genblocks.py 1.19.3 (#34) 2022-12-07 21:09:58 -06:00
genentities.py 1.19.3 (#34) 2022-12-07 21:09:58 -06:00
genlanguage.py 1.19.3 (#34) 2022-12-07 21:09:58 -06:00
genregistries.py Pathfinder (#25) 2022-11-12 23:54:05 -06:00
migrate.py 1.19.3 (#34) 2022-12-07 21:09:58 -06:00
newpacket.py 1.19.3 (#34) 2022-12-07 21:09:58 -06:00
README.md 1.19.3 (#34) 2022-12-07 21:09:58 -06:00

Tools for automatically generating code to help with updating Minecraft versions.

The directory name doesn't start with azalea- because it's not a Rust crate.

Requirements

  • Python 3.8+
  • Java 17+
  • Maven

Usage

Generate packet:
python newpacket.py [packet id] [clientbound or serverbound] [game/handshake/login/status]
This will create a new file in the azalea-protocol/src/packets/[state] directory. You will probably have to manually fix up the auto generated code.

Updating to a new Minecraft version

First, run python migrate.py [new version]. This will run a script that automatically updates as much as it can, including:

  • Adding, removing, and updating packets in azalea-protocol (limited)
  • Updating supported version in README.md
  • Updating the PROTOCOL_VERSION variable in azalea-protocol
  • Generating blocks in azalea-block
  • Generating block shapes in azalea-physics
  • Generating registries in azalea-registries
  • Updating en_us.json in azalea-language
  • Generating entity metadata structs and parsers in azalea-world

If you're lucky, that's all you're going to have to do. Look at the diff (git diff) and type-check the code (cargo check) to make sure everything is right. In the diff, specifically look for new comments that have "TODO".

If a packet is incorrect, you'll want to find it in the Minecraft source. The name of the struct should be the same or similar as the class in the vanilla source. Now, you'll have to manually write the struct for the packet. If the packet existed in the version before and it's just being updated, you can compare against that to see what was updated. Note that if a packet is particularly complicated, you may have to implement McBufReadable and McBufWritable, but most of the time the #[derive(McBuf)] macro will be able to generate the impls correctly. Look at other existing packets as reference if you're confused.

Finally, test by making a bot join a world. Specifically, you'll want to test the things that were updated in the version. Setting the RUST_LOG environment variable to debug or trace may help you find the source of crashes (trace shows the first few hundred bytes for every packet received so it's typically more useful, but it may log more than you want).

If it all works, make a pull request. If the version you updated to is a snapshot, make it a draft PR (the main branch is for release versions).

Extracting new data

At the time of writing, the following data generators are used:

Some things can be obtained from multiple generators. You should prefer them by the order above (the vanilla generator is the most reliable).