## 📦 [Bookshelf - 3.0.0](https://github.com/mcbookshelf/bookshelf/releases/tag/v3.0.0)
> **🚂 The Pipeline Update!**
>
> *This release overhauls the project structure with Beet, focusing on modularity and isolation of each module. It also introduces a new version loader that resolves conflicts between multiple versions.*
>
> **⚠️ BREAKING CHANGES**: This new version has a few breaking changes!
Bookshelf is now based on **Minecraft 1.21.5**.
Each module of Bookshelf is now shipped as a separate datapack for people wanting to use only a single module.
Introduced bundles to better group modules, replacing **Bookshelf** and **Bookshelf Dev** datapacks: **Bookshelf Runtime**, **Bookshelf Dev**, **Bookshelf Prefabs**, and **Bookshelf Suite**.
- ⚠️ **[#281](https://github.com/mcbookshelf/bookshelf/issues/281)** - Merged the `bs.biome` and `bs.weather` modules into a single `bs.environment` module.
- 📦 **[#323](https://github.com/mcbookshelf/bookshelf/pull/323)** - Introduced bundles to better group modules, replacing **Bookshelf** and **Bookshelf Dev** datapacks: **Bookshelf Runtime**, **Bookshelf Dev**, **Bookshelf Prefabs**, and **Bookshelf Suite**.
- 🎉 **[#272](https://github.com/mcbookshelf/bookshelf/issues/272)** - Added an automatically generated `bs.load` module, removing the need for manual `load` and `unload` tags. Bookshelf now also uses **LanternLoad**.
- ⚡ **[#285](https://github.com/mcbookshelf/bookshelf/pull/285)** - Removed the need for `__help__` functions and `help` tags. These are now generated.
- 📝 **[#285](https://github.com/mcbookshelf/bookshelf/pull/285)** - Migrated the documentation to **mcbookshelf.dev** and reworked the contribution guide to explain the new **Beet** pipeline.
- ⚙️ **[#285](https://github.com/mcbookshelf/bookshelf/pull/285)** - Created a GitHub organization and transitioned from the **Jupyter Notebook** to **Beet**. Updated the metadata format, added new issue templates, and introduced workflows for automatic deployment to **Modrinth** and **Smithed**. Modules now also require a `README.md` and a `pack.png`.
- 📥 **[#333](https://github.com/mcbookshelf/bookshelf/issues/333)** - Bookshelf now has its own [download manager](https://mcbookshelf.dev), allowing users to select modules along with their dependencies and create custom bundles.
- 📥 **[#336](https://github.com/mcbookshelf/bookshelf/issues/336)** - Bookshelf is now available on **PyPI** for use with the **Beet** toolchain.
### `🧱 bs.block`
- ⚠️ **[#375](https://github.com/mcbookshelf/bookshelf/pull/375)** - Changed `get_block` and `get_type` to only return existing data. Empty strings for state or NBT are no longer possible; if absent, the field is omitted instead.
- ✨ **[#279](https://github.com/mcbookshelf/bookshelf/issues/279)** - Introduced `play_block_sound`, a function for playing block sounds.
- 🐛 **[#320](https://github.com/mcbookshelf/bookshelf/issues/320)** - Fixed functions that were previously unusable outside the Overworld.
- ⚡ **[#375](https://github.com/mcbookshelf/bookshelf/pull/375)** - Added default values to `emit_block_particle` and new parameters (`mode`, `viewers`).
- ⚡ **[#363](https://github.com/mcbookshelf/bookshelf/issues/363)** - Enhanced `fill_block`, `fill_type`, `fill_random`, `set_block`, and `set_type` to accept `strict` as a `mode` parameter, allowing control over whether the operation triggers block updates.
- ⚡ **[#349](https://github.com/mcbookshelf/bookshelf/issues/349)** - Added the `on_finished` argument to fill operations. If specified, the provided command runs automatically when the operation completes.
- ⚡ **[#287](https://github.com/mcbookshelf/bookshelf/issues/287)** - Updated `replace_type` to return whether a type was found and replaced.
### `⛰️ bs.environment`
- 🐛 **[#320](https://github.com/mcbookshelf/bookshelf/issues/320)** - Fixed functions that were previously unusable outside the Overworld.
### `🌱 bs.generation`
- ⚠️ **[#296](https://github.com/mcbookshelf/bookshelf/issues/296)** - Renamed the `bs.generate` module to `bs.generation`.
- ⚠️ **[#282](https://github.com/mcbookshelf/bookshelf/issues/282)** - Renamed scores used in callbacks to use the new `bs.lambda` objective.
- ⚠️ **[#296](https://github.com/mcbookshelf/bookshelf/issues/296)** - Renamed the `bs.generate:fractal_shape_2d` function to `bs.generation:gen_fractal_shape_2d`.
- ⚠️ **[#296](https://github.com/mcbookshelf/bookshelf/issues/296)** - Renamed the `bs.generate:shape_2d` function to `bs.generation:gen_shape_2d`.
- ⚠️ **[#296](https://github.com/mcbookshelf/bookshelf/issues/296)** - Renamed the `bs.generate:simplex_shape_2d` function to `bs.generation:gen_simplex_shape_2d`.
### `❤️ bs.health`
- ⚠️ **[#396](https://github.com/mcbookshelf/bookshelf/issues/396)** - Updated the `get_max_health` function to only return the base value, excluding all modifiers.
- 🐛 **[#348](https://github.com/mcbookshelf/bookshelf/pull/348)** - Fixed an issue where running the heal command in a tick loop caused empty hearts to visually disappear.
### `🎯 bs.hitbox`
- ⚠️ **[#318](https://github.com/mcbookshelf/bookshelf/issues/318)** - Introduced `collision_shape` for block hitboxes and renamed `shape` to `interaction_shape`.
- ⚠️ **[#318](https://github.com/mcbookshelf/bookshelf/issues/318)** - Removed `is_in_block` and `is_entity_in_block(s)` functions in favor of `is_in_block_` and `is_entity_in_block(s)_`.
- ⚠️ **[#297](https://github.com/mcbookshelf/bookshelf/issues/297)** - Replaced the `is_composite` block tag with `is_full_cube` for better clarity.
- ✨ **[#299](https://github.com/mcbookshelf/bookshelf/pull/299)** - Moved the `#bs.hitbox:can_pass_through` block tag from the move module and documented it.
- ✨ **[#285](https://github.com/mcbookshelf/bookshelf/pull/285)** - Introduced the `#bs.hitbox:is_sized` tag for better hitbox management.
- 🐛 **[#320](https://github.com/mcbookshelf/bookshelf/issues/320)** - Fixed functions that were previously unusable outside the Overworld.
### `🖱️ bs.interaction`
- ✨ **[#300](https://github.com/mcbookshelf/bookshelf/issues/300)** - Added `bs.interaction.hovered` tag to check if an interaction is currently hovered.
### `📄 bs.log`
- ⚠️ **[#369](https://github.com/mcbookshelf/bookshelf/issues/369)** - Migrated the `bs.log` module to use SNBT instead of JSON for log messages.
### `🏃 bs.move`
- ⚠️ **[#282](https://github.com/mcbookshelf/bookshelf/issues/282)** - Updated `on_collison` callback: scores now use the `bs.lambda` objective, and the input requires a full command instead of a function path. Additionally, `on_collision/*` functions have been renamed to `callback/*`.
- ✨ **[#318](https://github.com/mcbookshelf/bookshelf/issues/318)** - Added optional `hitbox_shape` parameter to `apply_vel` functions, selecting between `collision` and `interaction` hitboxes.
- ✨ **[#298](https://github.com/mcbookshelf/bookshelf/issues/298)** - Predicate `bs.move:has_vel` is now properly documented.
hitbox_shape
- 🐛 **[#316](https://github.com/mcbookshelf/bookshelf/issues/316)** - Fixed entities clipping into blocks during collision resolution.
### `🔦 bs.raycast`
- ⚡ **[#358](https://github.com/mcbookshelf/bookshelf/issues/358)** - Added additional lambda values to callbacks.
- ⚡ **[#318](https://github.com/mcbookshelf/bookshelf/issues/318)** - Added the `hitbox_shape` argument to `run`, allowing selection between `collision` and `interaction` shapes.
### `⏲️ bs.schedule`
- ⚠️ **[#282](https://github.com/mcbookshelf/bookshelf/issues/282)** - Changed the `schedule` function signature for better consistency with others that use callbacks.
### `📰 bs.sidebar`
- ⚡ **[#367](https://github.com/mcbookshelf/bookshelf/issues/367)** - Optimized the module for the 1.21.5 version of Minecraft.
- 🐛 **[#301](https://github.com/mcbookshelf/bookshelf/pull/301)** - Fixed the issue where `bs.sidebar:create` was not functioning correctly.
### `🔠 bs.string`
- 🎉 **[#283](https://github.com/mcbookshelf/bookshelf/pull/283)** - Added a new `bs.string` module for managing strings.
### `🧣 bs.spline`
- 🎉 **[#241](https://github.com/mcbookshelf/bookshelf/issues/241)** - Added a new `bs.spline` module for working with splines.
### `⌚ bs.time`
- 🐛 **[#379](https://github.com/mcbookshelf/bookshelf/issues/379)** - Fixed get time for the 1.21.5 version of Minecraft.
### `👀 bs.view`
- ✨ **[#318](https://github.com/mcbookshelf/bookshelf/issues/318)** - Added the `hitbox_shape` argument to raycast related functions, allowing selection between `collision` and `interaction` shapes.
- ✨ **[#299](https://github.com/mcbookshelf/bookshelf/pull/299)** - Block tag `can_see_through` is now properly documented.
- 🐛 **[#319](https://github.com/mcbookshelf/bookshelf/issues/319)** - Fixed `can_see_ata` max distance computation.