Bookshelf Suite
on Aug 30, 2025📦 Bookshelf - 3.1.1
🩹 Hotfix Release!
Patch release for version 3.1.0.
🎯 bs.environment
- 🐛 #482 - Fixed misplaced test function that caused module load errors.
Bookshelf Suite
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:overworldwhen running location-based loot tables.
🔬 bs.dump
- 🐛 #441 - Fixed
#bs.dump:varincorrectly appendingundefinedto output.
⛰️ bs.environment
- ✨ #14 - Added
#bs.environment:get_sun_angleto 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_angleto get the current sun's angle on the Y axis relative to the horizon, in degrees. - ✨ #14 - Added
#bs.environment:get_current_moon_angleto get the current moon's angle on the Y axis relative to the horizon, in degrees. - ✨ #14 - Added
#bs.environment:get_moon_phaseto get the current moon phase as a string identifier following Minecraft's 8-day lunar cycle. - ✨ #14 - Added
#bs.environment:look_at_sunto orient the executing entity to look at the sun. - ✨ #14 - Added
#bs.environment:look_at_moonto 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_timefor determining current time of day. - ✨ #475 - Added villagers behavior predicates:
is_villager_working_time,is_villager_socializing_time,is_villager_sleeping_timefor detecting villager activity phases. - ✨ #475 - Added beds usage predicate:
is_bed_timefor determining when players can use beds based on weather and time conditions. - ✨ #475 - Added mobs behavior predicates:
is_undead_burning_time,is_monster_spawning_timefor detecting mob behavior condition according to weather and time. - ✨ #475 - Added bees behavior predicate:
is_bee_sleeping_timefor detecting time when bees are in their nests/hives. - ✨ #475 - Added creakings spawning predicate:
is_creaking_spawn_timefor 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_entitynow also returnsdepthin addition towidth. For most dynamic entitiesdepthequalswidth, 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
/rotatewith/tpinbs.positionto fix jitter and momentum issues.
🎲 bs.random
- ✨ #286 - Added support for normal distribution generation to
bs.randommodule. - 🐛 #469 - Fixed missing
execute in minecraft:overworldwhen running location-based loot tables.
🔦 bs.raycast
- ✨ #465 - Added support for baked and custom entity hitboxes.
- ✨ #445 -
#bs.raycast:runnow 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 Suite
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 Suite
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.healthmodule.
❤️ 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_placementthat was incorrectly using hit normal data from the previous call instead of the current one.
Bookshelf Suite
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.biomeandbs.weathermodules into a singlebs.environmentmodule. - 📦 #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.loadmodule, removing the need for manualloadandunloadtags. Bookshelf now also uses LanternLoad. - ⚡ #285 - Removed the need for
__help__functions andhelptags. 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.mdand 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_blockandget_typeto 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_particleand new parameters (mode,viewers). - ⚡ #363 - Enhanced
fill_block,fill_type,fill_random,set_block, andset_typeto acceptstrictas amodeparameter, allowing control over whether the operation triggers block updates. - ⚡ #349 - Added the
on_finishedargument to fill operations. If specified, the provided command runs automatically when the operation completes. - ⚡ #287 - Updated
replace_typeto 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.generatemodule tobs.generation. - ⚠️ #282 - Renamed scores used in callbacks to use the new
bs.lambdaobjective. - ⚠️ #296 - Renamed the
bs.generate:fractal_shape_2dfunction tobs.generation:gen_fractal_shape_2d. - ⚠️ #296 - Renamed the
bs.generate:shape_2dfunction tobs.generation:gen_shape_2d. - ⚠️ #296 - Renamed the
bs.generate:simplex_shape_2dfunction tobs.generation:gen_simplex_shape_2d.
❤️ bs.health
- ⚠️ #396 - Updated the
get_max_healthfunction 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_shapefor block hitboxes and renamedshapetointeraction_shape. - ⚠️ #318 - Removed
is_in_blockandis_entity_in_block(s)functions in favor ofis_in_block_<collision|interaction>andis_entity_in_block(s)_<collision|interaction>. - ⚠️ #297 - Replaced the
is_compositeblock tag withis_full_cubefor better clarity. - ✨ #299 - Moved the
#bs.hitbox:can_pass_throughblock tag from the move module and documented it. - ✨ #285 - Introduced the
#bs.hitbox:is_sizedtag for better hitbox management. - 🐛 #320 - Fixed functions that were previously unusable outside the Overworld.
🖱️ bs.interaction
- ✨ #300 - Added
bs.interaction.hoveredtag to check if an interaction is currently hovered.
📄 bs.log
- ⚠️ #369 - Migrated the
bs.logmodule to use SNBT instead of JSON for log messages.
🏃 bs.move
- ⚠️ #282 - Updated
on_collisoncallback: scores now use thebs.lambdaobjective, and the input requires a full command instead of a function path. Additionally,on_collision/*functions have been renamed tocallback/*. - ✨ #318 - Added optional
hitbox_shapeparameter toapply_velfunctions, selecting betweencollisionandinteractionhitboxes. - ✨ #298 - Predicate
bs.move:has_velis 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_shapeargument torun, allowing selection betweencollisionandinteractionshapes.
⏲️ bs.schedule
- ⚠️ #282 - Changed the
schedulefunction 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:createwas not functioning correctly.
🔠 bs.string
- 🎉 #283 - Added a new
bs.stringmodule for managing strings.
🧣 bs.spline
- 🎉 #241 - Added a new
bs.splinemodule for working with splines.
⌚ bs.time
- 🐛 #379 - Fixed get time for the 1.21.5 version of Minecraft.
👀 bs.view
Bookshelf v2.2.2
on Dec 23, 2024📦 Bookshelf - 2.2.2
🐛 Fixes
- #293 Entity
creaking_transientwas removed from Minecraft 1.21.4, causingbs.hitboxto stop working for entities.
Bookshelf v2.2.1
on Dec 21, 2024Bookshelf v2.2.0
on Nov 26, 2024📦 Bookshelf - 2.2.0
🪐 The dimensional update!
This release features new modules for random distribution and terrain generation, refinements to existing modules, performance enhancements, and minor bug resolutions. Additionally, this update aims to ensure all functions work seamlessly across all dimensions.
Bookshelf is now based on Minecraft 1.21.3.
🎉 Added modules
- #1 / #220 Added the
bs.randommodule, which includes:- Random distributions: uniform, binomial, geometric, and Poisson.
- Noise generation functions: white, simplex, and fractal.
- Random selection of an element from a list.
- #6 Added the
bs.generatemodule for terrain generation. Currently supports 2D shape algorithms, enabling texture and heightmap-based terrain generation. - #193 Added the
bs.interactionmodule, which proposes interactions to listen to different players' events: left click, right click, hover (enter, leave and continuous).
✨ Added features
- #222 Added
#bs.block:fill_randomfor filling regions with randomly selected blocks. - #258 Added
#bs.block:emit_block_particleto emit block particles in specific locations. - #245 Added
piercingand callback options to#bs.raycast:run. - #203 Added
#bs.hitbox:is_entity_in_blockand#bs.hitbox:is_entity_in_blocksto verify if an entity is within a block. - #233 Introduced new link management functions:
#bs.link:remove_linkto remove specific links.#bs.link:as_children,#bs.link:as_parent,#bs.link:at_children, and#bs.link:at_parentto handle parent-child link relationships.
- #171 Added logging functions
#bs.log:historyand#bs.log:clear_historyfor viewing and clearing log history.
🔁 Tweaks
- #251 Enhanced
bs.blockfill functions to acceptfromandtoinputs as either[x, y, z]lists or as stringified coordinates (e.g.,~ ~5 25). - #247 Improved the default
bs.logformat for clarity. - #252 Optimized
bs.hitboxmodule for improved performance. - #265 Optimized
bs.schedulemodule for improved performance. - #265 Enabled
bs.movemodule to function effectively at higher coordinate ranges. Collision detection has also been improved and should be more robust. - #265 Load tags do not load modules in isolation anymore. This can now be done using the
exclusive_loadtag. - #276 Add new hitboxes (new babies and salmon variants).
🐛 Fixes
- #254 Resolved execution loop interruptions caused by
#bs.schedule:schedulecallbacks. - #243 Fixed unload functions for
bs.healthandbs.move. - #264 Resolved compatibility issues with the schedule module outside the overworld.
- #255 Fixed
bs.movelocal velocity collisions. - #262 Resolved collision issues with paintings for
bs.raycastandbs.move. - #256 Fixed XP progress boundary issues at 0% and 100%.
- #265 Corrected hitbox for player in spectator mode.
- #270 Enabled all modules to function across any dimension.
Bookshelf v2.1.1
on Aug 6, 2024📦 Bookshelf - 2.1.1
🔁 Tweaks
- (238) Load tags now load modules in isolation.
- (237) Enhanced speed of
bs.blockmodule. - (218) Enhanced speed of factorial function in
bs.math.
🐛 Fixes
- (236) Fix
bs.block,bs.idandbs.mathload functions. - (235) Fix
bs.blockinputs that required extra escaping.
📄 Documentation
- (215) There is now documentation about the documentation (kind of metadocumentation?).
Bookshelf v2.1.0
on Jun 13, 2024📦 Bookshelf - 2.1.0
Bookshelf is now based on Minecraft 1.21.
🎉 Addition
- (187) Add
#bs.block:map_typeand#bs.block:mix_typefunctions.
🐛 Fixes
- (211) Add missing help function tag in
bs.link. - (211) Add missing help function tag in
bs.vector. - (211) Add missing help function tag in
bs.xp.
📄 Documentation
- (206) Add new related datapacks and mods.
- (208) Add missing documentation for feature
bs.position:get_pos_and_rot. - (208) Add missing documentation for feature
bs.position:set_pos_and_rot. - (208) Add missing documentation for feature
bs.position:add_pos_and_rot.
📋 Conventions
- (#200) We throw away the old feature function header to a new one with only the licence. This header is now mandatory for all functions. All the metadata that was present inside the old one have been moved to the feature function tag.
- (#52, #175) Each module has now its own metadata that should be specified manually. The metadata of the features and modules are used to generate more metadata, including the dependencies. These metadata can be used by bots like the incomming Bookshelf Manager. More information here.
⚙️ Github and CI
Bookshelf v2.0.0
on May 11, 2024📦 Bookshelf - 2.0.0
This new version is filled with breaking changes. Since maintaining a list of those became unrealistic, the following changelog only highlights a selection of tweaks and new functionalities.
🎉 Addition
- There is now a changelog!
- Added player health manipulation.
- Added precise collisions (move, raycast and view).
- Added float manipulation (frexp and ldexp).
- Added a new hitbox module.
- Added a new raycast module.
- Added a new sidebar module.
🔁 Tweaks
- The project has a new fresh identity: Bookshelf.
- Every module has been reworked for improved accuracy, performance, and/or simplicity.
- Renamed almost everything (scores, objectives, functions, ...).
- Many functions now utilize macros, storage, or fake scores instead of objectives.
- Removed the core module. The library no longer requires a base module.
- Removed outdated modules (cache, item, mapedit, and memory).
- Merged the location and orientation modules into a new position module.
- Bitwise operations have been moved out of the math module into a separate module.
- Enhanced the accuracy of the move and view modules due to their rework and the addition of the new hitbox module.
- The schedule module now maintains the current execution context.
🐛 Bug fixes
- Who knows at this point 🤷♂️, almost no legacy code remains...



