1
2
Fork 0
mirror of https://github.com/mat-1/azalea.git synced 2025-08-02 14:26:04 +00:00
azalea/azalea-protocol
mat f42d630544
Physics (#11)
* Put physics module in azalea-entity

* port aabb

* add more stuff to PositionXYZ

* azalea-physics

* important collision things

* more physics stuff

* backup because i'm about to delete shapes

* more shape stuff

* CubeVoxelShape

* no compile errors???

insane

* impl VoxelShape for ArrayVoxelShape

* Shapes stuff

* collide_x but it doesn't work yet

* binary_search

* it compiles

* Entity has bounding box

* Update discrete_voxel_shape.rs

* Entity::make_bounding_box

* ok i'm about to merge az-entity and az-world

might be a terrible idea which is why i'm committing first

* ok so i moved entity to world

* on_pos and move_entity compiles

* add send_position

* move collision stuff to collision module in az-physics

* dimension is no longer an Option

* start trying to do collision for the client

* collision works 🎉

* start adding palette resizing

* get_and_set (pain)

* it compiles but probably won't work

* add a test

* remove printlns

* add more tests for palette stuff

* ClientboundMoveVec3Packet -> ClientboundMoveEntityPosPacket

i think i changed this on accident once

* palette resizing works

todo: remove the printlns

* Remove printlns in palette.rs

* fix issues from merge

* fixes + work a bit more on physics

* Better entities (#19)

* well it compiles

* add tests to entity storage

* add suggestions in azalea-brigadier

* this probably causes ub

* fix brigadiersuggestions

* get rid of entityid

* test From<EntityMut> for EntityRef

* don't mention other libraries since there's too many

* fix warnings

* do todos in brigadier suggestions

* work on physics

* more physics stuff

* remove trait feature on az-block

i think rust gets confused and compiles the macro without the feature

* bump ahash

* aes tests in az-crypto

* optimize aes's deps

* fix crashes

* fix section_index for negative numbers and test

* fix BlockPos protocol implementation

* remove some debug prints

* prepare to add ai_step

* make ai step work

* clippy
2022-08-29 20:41:01 -05:00
..
packet-macros Better errors (#14) 2022-08-06 02:22:19 -05:00
src Physics (#11) 2022-08-29 20:41:01 -05:00
Cargo.toml Physics (#11) 2022-08-29 20:41:01 -05:00
README.md add stretch goals to readme and typo fix 2022-08-18 23:28:44 -05:00

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.

  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.