## 📦 [Bookshelf - 3.1.0](https://github.com/mcbookshelf/bookshelf/releases/tag/v3.1.0)
> **💫 The Spatial Update!**
>
> *Introduces Moon and Sun position features, as well as fully customizable hitboxes that integrate across the entire Bookshelf ecosystem.*
Bookshelf is now based on **Minecraft 1.21.8**.
### `🧱 bs.block`
- 🐛 **[#469](https://github.com/mcbookshelf/bookshelf/issues/469)** - Fixed missing `execute in minecraft:overworld` when running location-based loot tables.
### `🔬 bs.dump`
- 🐛 **[#441](https://github.com/mcbookshelf/bookshelf/issues/441)** - Fixed `#bs.dump:var` incorrectly appending `undefined` to output.
### `⛰️ bs.environment`
- ✨ **[#14](https://github.com/mcbookshelf/bookshelf/issues/14)** - Added `#bs.environment:get_sun_angle` to get the sun's angle at a specific time on the Y axis relative to the horizon, in degrees.
- ✨ **[#14](https://github.com/mcbookshelf/bookshelf/issues/14)** - Added `#bs.environment:get_moon_angle`to get the moon's angle at a specific time on the Y axis relative to the horizon, in degrees.
- ✨ **[#14](https://github.com/mcbookshelf/bookshelf/issues/14)** - Added `#bs.environment:get_current_sun_angle` to get the current sun's angle on the Y axis relative to the horizon, in degrees.
- ✨ **[#14](https://github.com/mcbookshelf/bookshelf/issues/14)** - Added `#bs.environment:get_current_moon_angle` to get the current moon's angle on the Y axis relative to the horizon, in degrees.
- ✨ **[#14](https://github.com/mcbookshelf/bookshelf/issues/14)** - Added `#bs.environment:get_moon_phase` to get the current moon phase as a string identifier following Minecraft's 8-day lunar cycle.
- ✨ **[#14](https://github.com/mcbookshelf/bookshelf/issues/14)** - Added `#bs.environment:look_at_sun` to orient the executing entity to look at the sun.
- ✨ **[#14](https://github.com/mcbookshelf/bookshelf/issues/14)** - Added `#bs.environment:look_at_moon` to orient the executing entity to look at the moon.
- ✨ **[#475](https://github.com/mcbookshelf/bookshelf/issues/475)** - Added time-based predicates: `is_day_time`, `is_night_time`, `is_sunrise_time`, `is_sunset_time` for determining current time of day.
- ✨ **[#475](https://github.com/mcbookshelf/bookshelf/issues/475)** - Added villagers behavior predicates: `is_villager_working_time`, `is_villager_socializing_time`, `is_villager_sleeping_time` for detecting villager activity phases.
- ✨ **[#475](https://github.com/mcbookshelf/bookshelf/issues/475)** - Added beds usage predicate: `is_bed_time` for determining when players can use beds based on weather and time conditions.
- ✨ **[#475](https://github.com/mcbookshelf/bookshelf/issues/475)** - Added mobs behavior predicates: `is_undead_burning_time`, `is_monster_spawning_time` for detecting mob behavior condition according to weather and time.
- ✨ **[#475](https://github.com/mcbookshelf/bookshelf/issues/475)** - Added bees behavior predicate: `is_bee_sleeping_time` for detecting time when bees are in their nests/hives.
- ✨ **[#475](https://github.com/mcbookshelf/bookshelf/issues/475)** - Added creakings spawning predicate: `is_creaking_spawn_time` for detecting time when creakings can spawn.
### `❤️ bs.health`
- 🐛 **[#466](https://github.com/mcbookshelf/bookshelf/issues/466)** - Fixed a bug where healing on Paper servers always set players' health to maximum.
### `🎯 bs.hitbox`
- ✨ **[#465](https://github.com/mcbookshelf/bookshelf/pull/465)** - Added support for custom hitboxes. `#bs.hitbox:get_entity` now also returns `depth` in addition to `width`. For most dynamic entities `depth` equals `width`, except for static entities (e.g. item frames, paintings) and custom hitboxes.
### `🖱️ bs.interaction`
- 🐛 **[#463](https://github.com/mcbookshelf/bookshelf/issues/463)** - Fixed an issue where left/right click events could incorrectly target previously clicked entities instead of the current one.
### `🏃 bs.move`
- ✨ **[#465](https://github.com/mcbookshelf/bookshelf/pull/465)** - Optimized bounding box computation for moving entities and added support for baked and custom hitboxes.
### `🧭 bs.position`
- 🐛 **[#455](https://github.com/mcbookshelf/bookshelf/issues/455)** – Replaced `/rotate` with `/tp` in `bs.position` to fix jitter and momentum issues.
### `🎲 bs.random`
- ✨ **[#286](https://github.com/mcbookshelf/bookshelf/issues/286)** - Added support for **normal distribution** generation to `bs.random` module.
- 🐛 **[#469](https://github.com/mcbookshelf/bookshelf/issues/469)** - Fixed missing `execute in minecraft:overworld` when running location-based loot tables.
### `🔦 bs.raycast`
- ✨ **[#465](https://github.com/mcbookshelf/bookshelf/pull/465)** - Added support for baked and custom entity hitboxes.
- ✨ **[#445](https://github.com/mcbookshelf/bookshelf/issues/445)** - `#bs.raycast:run` now computes all lambda data before invoking callbacks.
- 🐛 **[#457](https://github.com/mcbookshelf/bookshelf/issues/457)** - Fixed raycasts not stopping at the nearest hit when detecting both blocks and entities.
### `🧣 bs.spline`
- ✨ **[#417](https://github.com/mcbookshelf/bookshelf/issues/417)** - Added full support for **linear splines**.