📦 Bookshelf - 3.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 - Fixed missing execute in minecraft:overworld when running location-based loot tables.

🔬 bs.dump#

  • 🐛 #441 - Fixed #bs.dump:var incorrectly appending undefined to output.

⛰️ bs.environment#

  • #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 - Added #bs.environment:get_moon_angleto get the moon’s angle at a specific time on the Y axis relative to the horizon, in degrees.

  • #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 - 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 - Added #bs.environment:get_moon_phase to get the current moon phase as a string identifier following Minecraft’s 8-day lunar cycle.

  • #14 - Added #bs.environment:look_at_sun to orient the executing entity to look at the sun.

  • #14 - Added #bs.environment:look_at_moon to orient the executing entity to look at the moon.

  • #475 - Added time-based predicates: is_day_time, is_night_time, is_sunrise_time, is_sunset_time for determining current time of day.

  • #475 - Added villagers behavior predicates: is_villager_working_time, is_villager_socializing_time, is_villager_sleeping_time for detecting villager activity phases.

  • #475 - Added beds usage predicate: is_bed_time for determining when players can use beds based on weather and time conditions.

  • #475 - Added mobs behavior predicates: is_undead_burning_time, is_monster_spawning_time for detecting mob behavior condition according to weather and time.

  • #475 - Added bees behavior predicate: is_bee_sleeping_time for detecting time when bees are in their nests/hives.

  • #475 - Added creakings spawning predicate: is_creaking_spawn_time for detecting time when creakings can spawn.

❤️ bs.health#

  • 🐛 #466 - Fixed a bug where healing on Paper servers always set players’ health to maximum.

🎯 bs.hitbox#

  • #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 - Fixed an issue where left/right click events could incorrectly target previously clicked entities instead of the current one.

🏃 bs.move#

  • #465 - Optimized bounding box computation for moving entities and added support for baked and custom hitboxes.

🧭 bs.position#

  • 🐛 #455 – Replaced /rotate with /tp in bs.position to fix jitter and momentum issues.

🎲 bs.random#

  • #286 - Added support for normal distribution generation to bs.random module.

  • 🐛 #469 - Fixed missing execute in minecraft:overworld when running location-based loot tables.

🔦 bs.raycast#

  • #465 - Added support for baked and custom entity hitboxes.

  • #445 - #bs.raycast:run now computes all lambda data before invoking callbacks.

  • 🐛 #457 - Fixed raycasts not stopping at the nearest hit when detecting both blocks and entities.

🧣 bs.spline#

  • #417 - Added full support for linear splines.