aboutsummaryrefslogtreecommitdiff
path: root/CHANGELOG.md
blob: 94394e441d58a68f45aef2f453096f0a3eb9b1a0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
# Changelog

All notable changes to Azalea will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
Due to the large scope of Azalea and the fact that almost every Minecraft version
is breaking anyways, semantic versioning is not followed.

## [Unreleased]

### Added

- `azalea-brigadier` now optionally allows commands to return a `Result<i32, _>` instead of just an `i32`.
- `azalea-chat` is now re-exported in `azalea::chat`.
- Shape offsets were implemented, so bots no longer get stuck on bamboo and dripstone.

### Changed

- Many functions in `Client` and `EntityRef` now return an `AzaleaResult` instead of panicking when getting entity data fails.
- The previous `azalea::chat` module (from `azalea-client`) was moved to `azalea::client_chat`.

### Fixed

- Incorrect `damage_kind` component protocol implementation.
- The `AirSupply` metadata component was defaulting to `0` instead of `300`. (@wbbradley)

## [0.16.0+mc26.1] - 2026-03-27

### Added

- Add `SimulationPathfinderExecutionPlugin`, an alternative execution engine for the pathfinder with smoother movement.
- The pathfinder can now traverse on the surface of water.
- `Account`s can now have custom refresh and join behavior using `AccountTrait`.
- Add `Account::microsoft_with_opts` to make it easier to create accounts with custom cache files. (@ElijahBare)
- Add an `EntityRef` type to simplify interactions with entities.
- Implement speed/swiftness.
- Add `BlockTrait::set_property` to allow setting properties on blocks generically.
- You can now access a client's XP with `Client::experience`. (@nebula161)
- Re-implement `Client::map_component` and `map_get_component`.
- Add `Client::exit` and `Swarm::exit` to make it easier to return from `ClientBuilder::start` or `SwarmBuilder::start`.
- Add `Event::ConnectionFailed` for when the client failed to create its initial connection to the server.
- `ChunkStorage` can now have custom implementations using `ChunkStorageTrait`. (@sdwhw)
- Setting blocks now updates `Section::block_count`.

### Changed

- Update to Minecraft 26.1.
- Rename `Instance` to `World` (and rename other related types).
- Move the `Client` struct out of `azalea-client` into `azalea`.
- `Client::ecs` is now an `RwLock` instead of a `Mutex`.
- `Client::component` and `entity_component` now return a mapped RwLock guard instead of cloning the component.
- Most functions on `Client` that previously returned `Entity` now return `EntityRef` instead.
- Deprecate pathfinder `InverseGoal`.
- Add a `bevy_ecs` feature to `azalea-protocol` and related crates to allow disabling the Bevy dependencies.
- Replace `azalea-buf`'s `AzaleaRead` and `AzaleaWrite` traits with a single `AzBuf` trait.
- Lots of optimizations, especially for the pathfinder.

### Fixed

- The pathfinder now avoids magma blocks.
- Fixed several panics, OOMs, and memory leaks in `azalea-protocol`.
- Click events in chat messages were missing.
- `ClientboundSetEquipment` failed to deserialize if a packet used animal armor slots.
- Incorrect protocol implementations for `ClientboundPlayerInfoUpdate`, recipe data, and when writing chunks.
- Block break speeds are now influenced by the `Tool` data component.
- Fall back to Google DNS when the system resolver is unavailable. (@thesalam4ik)

## [0.15.1+mc1.21.11] - 2026-02-03

### Fixed

- Fix compilation errors from unstable dependencies.
- Serializing `FormattedText` with serde was writing `extra` twice.
- Attack cooldowns were being applied incorrectly for tools.
- `Identifier` had an incorrect `Hash` and `PartialEq` implementation.
- Explosion knockback was being applied incorrectly.

## [0.15.0+mc1.21.11] - 2025-12-18

### Added

- Add `Client::query_entity` and `try_query_entity` to complement `query_self`.
- Add `Client::entity_interact` and `EntityInteractEvent` to interact with entities without checking that they're in the crosshair.
- Allow disabling dependencies related to Microsoft auth with the `online-mode` cargo feature.
- Implement mob effects, including jump boost, haste, conduit power, and mining fatigue. (@ShayBox)
- Support for the efficiency enchantment.
- Support for items with attribute modifiers.
- More documentation, including auto-generated docs for entity metadata types.
- The documentation now shows scraped examples and tags for Bevy traits like `Component`.
- Support for cookie packets (required by a certain anticheat).

### Changed

- Update to Minecraft 1.21.11. (with help from @eihqnh)
- Update to Bevy 0.17.
- `Client::query`, `map_component`, and `map_get_component` were replaced by `Client::query_self`.
- Rename `SendPacketEvent` to `SendGamePacketEvent` and `PingEvent` to `GamePingEvent`.
- Swap the order of the type parameters in entity filtering functions so query is first, then filter.
- Moved `azalea_client::inventory::Inventory` to `azalea_entity::inventory::Inventory`.
- Add `Client::open_container_at_with_timeout_ticks`, and `Client::open_container_at` now times out after 5 seconds.
- Rename `ResourceLocation` to `Identifier` to match Minecraft's new internal naming.
- Refactor `RegistryHolder` to pre-deserialize some registries.
- The handler function is now automatically single-threaded, making `#[tokio::main(flavor = "current_thread")]` unnecessary.
- Improve APIs related to resolving server addresses.
- Mojang's sessionserver is now requested using the SOCKS5 proxy given in `JoinOpts::proxy`.
- Refactor `azalea-registry`. Notably, `Item` and `Block` are now named `ItemKind` and `BlockKind`.
- `ClientBuilder::start` and `SwarmBuilder::start` now return just `AppExit` instead of `Result<AppExit>`.

### Fixed

- The wrong path was temporarily executed if we received a `GotoEvent` while the path that's being executed was more than 50 nodes long.
- The pathfinder can now jump from dirt path and farmland blocks correctly.
- Don't panic when receiving an unexpected `PathFoundEvent`. (@Hiradpi)
- The pathfinder sometimes got stuck when going up stairs that are facing the wrong direction.
- ReachBlockPosGoal had the wrong cost when the destination is surrounded in blocks.
- Some parkour movements had the wrong costs.
- The pathfinder no longer spins when descending more than one block.
- The pathfinder now avoids slipping off when the last block of the path is on ice.
- Don't panic when the `LocalPlayerEvents` component is missing. (@suprohub)
- The 'with' field in formatted text didn't correctly support mixed types. (@Tert0)
- The WritableBookContent and ResolvableProfile data components had the wrong protocol implementations.
- Resolving server addresses shouldn't be recursive.
- A 5 tick mining delay was always being applied after we mined for the first time.
- Running Azalea on Windows in debug mode would result in a stack overflow error.
- Wrong packet order when attacking and sprinting in the same tick.
- Most entity variant components were using the wrong type.

## [0.14.0+mc1.21.8] - 2025-09-28

### Added

- Sneaking/crouching.
- `HitResult` now contains the entity that's being looked at.
- A `QueuedServerBlockUpdates` component that keeps track of block updates per `Update`.
- Local clients now have a `TicksConnected` component. (@Kumpelinus)
- There is now a `azalea_inventory::default_components::get_default_component` function to get the default value of a component for a registry item.
- `ItemStack` now has a `get_component` function that supports default components.
- `Client::nearest_entity_by`.
- Blocks now have functions for getting property keys and values as strings. (@urisinger)
- `BitSet::len`, `BitSet::get`, `BitSet::iter_ones`.
- All packets are now `PartialEq`.
- The `fallback` field was implemented for chat messages. (@Tert0)
- Interactive auth now appends `?otc={code}` to the login URL to skip having to manually paste the auth code.

### Changed

- Update to Minecraft 1.21.8.
- Renamed `azalea_entity::EntityKind` to `EntityKindComponent` to disambiguate with `azalea_registry::EntityKind`.
- Moved functions and types related to hit results from `azalea::interact` to `azalea::interact::pick`.
- `Client::attack` now takes `Entity` instead of `MinecraftEntityId`.
- `ItemStackData::components` was renamed to `component_patch`.
- The fields in `LookDirection` have been replaced with getters.
- Renamed `Client::entity_by` to `any_entity_by`, and `Client::entities_by` to `nearest_entities_by`.
- `EyeHeight` was moved into `EntityDimensions`, and `EntityDimensions` is now its own component.
- Replaced `start_goto_without_mining` with `start_goto_with_opts`.
- Rename `send_chat_packet` / `send_command_packet` to `write_chat_packet` / `write_command_packet` (for consistency with `write_packet`).
- Split `ClientInformation` handling out of `BrandPlugin` to `ClientInformationPlugin`.
- `ClientBuilder::start` and `SwarmBuilder::start` now return a `Result<AppExit>` instead of `Result<!>`.
- `ClientsideCloseContainerEvent`, `MenuOpenedEvent`, and `CloseContainerEvent` are now triggers instead of events.
- `Client::chat` now takes anything with `impl Into<String>`.
- Some types related Azalea's bot plugin were moved to `azalea::bot::*`.
- `AABB` was renamed to `Aabb` to follow Rust naming guidelines.

### Fixed

- Fix packet order for loading (`PlayerLoaded`/`MovePlayerPos`), sprinting (`PlayerInput`/`PlayerCommand`), and `CarriedItem`.
- Clients no longer send invalid look directions if the server teleports us with one.
- Look directions are now rounded based on the default Minecraft sensitivity, which may help avoid flagging anticheats.
- Movement code was updated with the changes from 1.21.5, so it no longer flags Grim.
- Clients can no longer sprint if their food level is too low.
- `azalea-chat` now handles arrays of integers in the `with` field. (@qwqawawow)
- `azalea-chat` no longer incorrectly persists styles of components in the "extra" field.
- `dark_red` was way too dark red.
- Inventories now use the correct max stack sizes.
- Clients now send the correct data component checksums when interacting with items.
- Fix parsing some metadata fields of Display entities.
- Mining blocks in creative mode now works. (@eihqnh)
- Improved matchers on the `ChatPacket` functions to work on more servers. (@ShayBox)
- Bevy's `AppExit` Event is now handled by Azalea's ECS runner.
- Pathfinding now works over farmland blocks.
- There is no longer a panic when the account token is automatically refreshed.
- Fix `is_valid_id` on registries incorrectly returning true for values equal to the length.
- Fix outdated implementation for the `ClientboundMerchantOffers` packet.
- Fix compilation with new dependency versions. (@ShayBox)

## [0.13.0+mc1.21.5] - 2025-06-15

### Added

- This changelog. To see changes before this update, look at the git commits.
- azalea and azalea-client now have a `packet-event` feature, which can be disabled for efficiency if you're not using `Event::Packet`.
- `StartJoinServerEvent` can now be used to join servers exclusively from the ECS without a Tokio runtime.
- Add `FormattedText::to_html` and `FormattedText::to_custom_format`. (@Kumpelinus)
- Non-standard legacy hex colors like `ยง#ff0000` are now supported in azalea-chat.
- Chat signing.
- Add auto-reconnecting which is enabled by default.
- `ClientBuilder` and `SwarmBuilder` are now Send.
- Add `Client::start_use_item`.
- The pathfinder no longer avoids slabs, stairs, and dirt path blocks.
- The pathfinder now immediately recalculates if blocks are placed in its path.
- Bots that use custom pathfinder moves can now keep arbitrary persistent state by using the `CustomPathfinderState` component and `PathfinderCtx::custom_state`.
- The reach distance for the pathfinder `ReachBlockPosGoal` is now configurable. (@x-osc)
- There is now a `retry_on_no_path` option in `GotoEvent` that can be set to false to make the pathfinder give up if no path could be found.
- azalea-brigadier now supports suggestions, command contexts, result consumers, and returning errors with `ArgumentBuilder::executes_result`.
- Proper support for getting biomes at coordinates.
- Add a new `Client::entities_by` which sorts entities that match a criteria by their distance to the client.
- New client event `Event::ReceiveChunk`.
- Several new functions for interacting with inventories (`Client::get_inventory`, `get_held_item`, `ContainerHandleRef::left_click`, `shift_click`, `right_click`, `slots`).
- Add `Client::mine_with_auto_tool`.
- Add `Client::set_selected_hotbar_slot` and `Client::selected_hotbar_slot`.
- Add `Client::attack_cooldown_remaining_ticks` to complement `has_attack_cooldown`.
- Add `BlockPos::length`, `distance_to`, and `center_bottom`.

### Changed

- `Client::goto` is now async and completes when the client reaches its destination. `Client::start_goto` should be used if the old behavior is desired.
- The `BlockState::id` field is now private, use `.id()` instead.
- Update to [Bevy 0.16](https://bevyengine.org/news/bevy-0-16/).
- Rename `InstanceContainer::insert` to `get_or_insert`.
- Replace `BlockInteractEvent` with the more general-purpose `StartUseItemEvent`.
- Replace `wait_one_tick` and `wait_one_update` with `wait_ticks` and `wait_updates`.
- Functions that took `&Vec3` or `&BlockPos` as arguments now only take them as owned types.
- Rename `azalea_block::Block` to `BlockTrait` to disambiguate with `azalea_registry::Block`.
- `GotoEvent` is now non-enhaustive and should instead be constructed by calling its methods.

### Fixed

- Clients now validate incoming packets using the correct `MAXIMUM_UNCOMPRESSED_LENGTH` value.
- Several protocol fixes, including for `ClientboundSetPlayerTeam` and a few data components.
- No more chunk errors when the client joins another world with the same name but different height.
- Update the `InstanceName` component correctly when we receive a respawn or second login packet.
- azalea-chat now handles legacy color codes correctly when parsing from NBT.
- Send the correct UUID to servers in `ClientboundHello` when we're joining in offline-mode.
- Block shapes and some properties were using data from `1.20.3-pre4` due to using an old data generator (Pixlyzer), which has now been replaced with the data generator from [Pumpkin](https://github.com/Pumpkin-MC/Extractor).
- When patching the path, don't replace the move we're currently executing.
- The correct sequence number is now sent when interacting with blocks.
- Mining is now generally more reliable and doesn't flag Grim.
- Ghost blocks are now handled correctly due to implementing `ClientboundBlockChangedAck`.
- Player eye height was wrong due to being calculated from height instead of being a special case (was 1.53, should've been 1.62).
- The player inventory is now correctly updated when we close a container.
- Inventory interactions are now predicted on the client-side again, and the remaining click operations were implemented.
- `Client::open_container_at` now waits up to 10 ticks for the block to exist if you try to click air.
- Wrong physics collision code resulted in `HitResult` sometimes containing the wrong coordinates and `inside` value.
- Fix the client being unresponsive for a few seconds after joining due to not sending `ServerboundPlayerLoaded`.
- Fix panic when a client received `ClientboundAddEntity` and `ClientboundStartConfiguration` at the same time.
- Fix panic due to `ClientInformation` being inserted too late.
- `ClientboundTeleportEntity` did not handle relative teleports correctly.
- Pathfinder now gets stuck in water less by automatically trying to jump if it's in water.