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 631ed63dbd
Swarm (#36)
* make azalea-pathfinder dir

* start writing d* lite impl

* more work on d* lite

* work more on implementing d* lite

* full d* lite impl

* updated edges

* add next() function

* add NoPathError

* why does dstar lite not work

* fix d* lite implementation

* make the test actually check the coords

* replace while loop with if statement

* fix clippy complaints

* make W only have to be PartialOrd

* fix PartialOrd issues

* implement mtd* lite

* add a test to mtd* lite

* remove normal d* lite

* make heuristic only take in one arg

* add `success` function

* Update README.md

* evil black magic to make .entity not need dimension

* start adding moves

* slightly improve the vec3/position situation

new macro that implements all the useful functions

* moves stuff

* make it compile

* update deps in az-pathfinder

* make it compile again

* more pathfinding stuff

* add Bot::look_at

* replace EntityMut and EntityRef with just Entity

* block pos pathfinding stuff

* rename movedirection to walkdirection

* execute path every tick

* advance path

* change az-pf version

* make azalea_client keep plugin state

* fix Plugins::get

* why does it think there is air

* start debugging incorrect air

* update some From methods to use rem_euclid

* start adding swarm

* fix deadlock

i still don't understand why it was happening but the solution was to keep the Client::player lock for shorter so it didn't overlap with the Client::dimension lock

* make lookat actually work probably

* fix going too fast

* Update main.rs

* make a thing immutable

* direction_looking_at

* fix rotations

* import swarm in an example

* fix stuff from merge

* remove azalea_pathfinder import

* delete azalea-pathfinder crate

already in azalea::pathfinder module

* swarms

* start working on shared dimensions

* Shared worlds work

* start adding Swarm::add_account

* add_account works

* change "client" to "bot" in some places

* Fix issues from merge

* Update world.rs

* add SwarmEvent::Disconnect(Account)

* almost add SwarmEvent::Chat and new plugin system

it panics rn

* make plugins have to provide the State associated type

* improve comments

* make fn build slightly cleaner

* fix SwarmEvent::Chat

* change a println in bot/main.rs

* Client::shutdown -> disconnect

* polish

fix clippy warnings + improve some docs a bit

* fix shared worlds*

*there's a bug that entities and bots will have their positions exaggerated because the relative movement packet is applied for every entity once per bot

* i am being trolled by rust

for some reason some stuff is really slow for literally no reason and it makes no sense i am going insane

* make world an RwLock again

* remove debug messages

* fix skipping event ticks

unfortunately now sending events is `.send().await?` instead of just `.send()`

* fix deadlock + warnings

* turns out my floor_mod impl was wrong

and i32::rem_euclid has the correct behavior LOL

* still errors with lots of bots

* make swarm iter & fix new chunks not loading

* improve docs

* start fixing tests

* fix all the tests

except the examples i don't know how to exclude them from the tests

* improve docs some more
2022-11-27 16:25:07 -06:00
..
azalea-protocol-macros chore: Release 2022-11-19 15:25:55 -06:00
src Swarm (#36) 2022-11-27 16:25:07 -06:00
Cargo.toml chore: Release 2022-11-19 15:25:55 -06:00
README.md Pathfinder (#25) 2022-11-12 23:54:05 -06:00

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.

  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.