Bookshelf Prefabs
on Jul 17, 2025📦 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 appendingundefined
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_angle
to 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 returnsdepth
in addition towidth
. For most dynamic entitiesdepth
equalswidth
, 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
inbs.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.
Bookshelf Prefabs
on May 4, 2025📦 Bookshelf - 3.0.2
🩹 A Quick Hotfix!
This is a hotfix for version 3.0.1.
- 🐛#431 - Improve compatibility by using deflate instead of bzip2 for compression.
❤️ bs.health
- 🐛 #428 - Ensure player health updates correctly when using percentage-based max health attributes.
🔬 bs.dump
- 🐛 #432 - Fix dump failing on compounds with single-letter keys.
Bookshelf Prefabs
on May 2, 2025📦 Bookshelf - 3.0.1
🩹 Simple Hotfix!
This is a hotfix for version 3.0.0.
- 📝 #314 - Add the Lifestring example, linking players' health using the
bs.health
module.
❤️ bs.health
- 🐛 #410 - Ensure player health updates consistently.
- 🐛 #426 – Players are now correctly killed when their health drops below 0, unless they are in Creative or Spectator mode.
🧣 bs.spline
- 🐛 #423 - Fix module tag incorrectly set to default, now set to runtime to ensure the module is properly included in bundles.
- 🐛 #412 - Fix Hermite spline tangents to use absolute space instead of relative.
- ⚡ #409 - Improve performance of sampling and streaming functions.
🔠 bs.string
- 🐛 #423 - Fix module tag incorrectly set to default, now set to runtime to ensure the module is properly included in bundles.
👀 bs.view
- 🐛 #424 - Fix
#bs.view:at_block_placement
that was incorrectly using hit normal data from the previous call instead of the current one.
Bookshelf Prefabs
on Apr 6, 2025📦 Bookshelf - 3.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 - Merged the
bs.biome
andbs.weather
modules into a singlebs.environment
module. - 📦 #323 - Introduced bundles to better group modules, replacing Bookshelf and Bookshelf Dev datapacks: Bookshelf Runtime, Bookshelf Dev, Bookshelf Prefabs, and Bookshelf Suite.
- 🎉 #272 - Added an automatically generated
bs.load
module, removing the need for manualload
andunload
tags. Bookshelf now also uses LanternLoad. - ⚡ #285 - Removed the need for
__help__
functions andhelp
tags. These are now generated. - 📝 #285 - Migrated the documentation to mcbookshelf.dev and reworked the contribution guide to explain the new Beet pipeline.
- ⚙️ #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 apack.png
. - 📥 #333 - Bookshelf now has its own download manager, allowing users to select modules along with their dependencies and create custom bundles.
- 📥 #336 - Bookshelf is now available on PyPI for use with the Beet toolchain.
🧱 bs.block
- ⚠️ #375 - Changed
get_block
andget_type
to only return existing data. Empty strings for state or NBT are no longer possible; if absent, the field is omitted instead. - ✨ #279 - Introduced
play_block_sound
, a function for playing block sounds. - 🐛 #320 - Fixed functions that were previously unusable outside the Overworld.
- ⚡ #375 - Added default values to
emit_block_particle
and new parameters (mode
,viewers
). - ⚡ #363 - Enhanced
fill_block
,fill_type
,fill_random
,set_block
, andset_type
to acceptstrict
as amode
parameter, allowing control over whether the operation triggers block updates. - ⚡ #349 - Added the
on_finished
argument to fill operations. If specified, the provided command runs automatically when the operation completes. - ⚡ #287 - Updated
replace_type
to return whether a type was found and replaced.
🧱 bs.environment
- 🐛 #320 - Fixed functions that were previously unusable outside the Overworld.
🌱 bs.generation
- ⚠️ #296 - Renamed the
bs.generate
module tobs.generation
. - ⚠️ #282 - Renamed scores used in callbacks to use the new
bs.lambda
objective. - ⚠️ #296 - Renamed the
bs.generate:fractal_shape_2d
function tobs.generation:gen_fractal_shape_2d
. - ⚠️ #296 - Renamed the
bs.generate:shape_2d
function tobs.generation:gen_shape_2d
. - ⚠️ #296 - Renamed the
bs.generate:simplex_shape_2d
function tobs.generation:gen_simplex_shape_2d
.
❤️ bs.health
- ⚠️ #396 - Updated the
get_max_health
function to only return the base value, excluding all modifiers. - 🐛 #348 - Fixed an issue where running the heal command in a tick loop caused empty hearts to visually disappear.
🎯 bs.hitbox
- ⚠️ #318 - Introduced
collision_shape
for block hitboxes and renamedshape
tointeraction_shape
. - ⚠️ #318 - Removed
is_in_block
andis_entity_in_block(s)
functions in favor ofis_in_block_<collision|interaction>
andis_entity_in_block(s)_<collision|interaction>
. - ⚠️ #297 - Replaced the
is_composite
block tag withis_full_cube
for better clarity. - ✨ #299 - Moved the
#bs.hitbox:can_pass_through
block tag from the move module and documented it. - ✨ #285 - Introduced the
#bs.hitbox:is_sized
tag for better hitbox management. - 🐛 #320 - Fixed functions that were previously unusable outside the Overworld.
🖱️ bs.interaction
- ✨ #300 - Added
bs.interaction.hovered
tag to check if an interaction is currently hovered.
📄 bs.log
- ⚠️ #369 - Migrated the
bs.log
module to use SNBT instead of JSON for log messages.
🏃 bs.move
- ⚠️ #282 - Updated
on_collison
callback: scores now use thebs.lambda
objective, and the input requires a full command instead of a function path. Additionally,on_collision/*
functions have been renamed tocallback/*
. - ✨ #318 - Added optional
hitbox_shape
parameter toapply_vel
functions, selecting betweencollision
andinteraction
hitboxes. - ✨ #298 - Predicate
bs.move:has_vel
is now properly documented. hitbox_shape - 🐛 #316 - Fixed entities clipping into blocks during collision resolution.
🔦 bs.raycast
- ⚡ #358 - Added additional lambda values to callbacks.
- ⚡ #318 - Added the
hitbox_shape
argument torun
, allowing selection betweencollision
andinteraction
shapes.
⏲️ bs.schedule
- ⚠️ #282 - Changed the
schedule
function signature for better consistency with others that use callbacks.
📰 bs.sidebar
- ⚡ #367 - Optimized the module for the 1.21.5 version of Minecraft.
- 🐛 #301 - Fixed the issue where
bs.sidebar:create
was not functioning correctly.
🔠 bs.string
- 🎉 #283 - Added a new
bs.string
module for managing strings.
🧣 bs.spline
- 🎉 #241 - Added a new
bs.spline
module for working with splines.
⌚ bs.time
- 🐛 #379 - Fixed get time for the 1.21.5 version of Minecraft.