Sable is a library mod for Minecraft (Fabric & NeoForge) that lets you build interactive, moving block structures called sub-levels. A sub-level is a self-contained Minecraft region — complete with chunks, block entities, and entities — that exists at a dynamic position and orientation within a level, driven by a full rigid-body physics simulation. If your mod needs ships, trains, moving platforms, contraptions, or any other structure that moves through the world, Sable handles the hard parts: physics integration, collision, entity tracking, chunk management, and cross-platform support.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/ryanhcode/sable/llms.txt
Use this file to discover all available pages before exploring further.
Installation
Add Sable to your mod’s build.gradle for Fabric or NeoForge.
Core Concepts
Understand sub-levels, the plot grid, and how Sable structures the world.
Developer Guides
Practical guides for block physics, entities, events, and datapacks.
API Reference
Full Java API reference for SubLevelContainer, PhysicsPipeline, and more.
What you can build
Sable provides the foundation for any Minecraft mod that needs moving block structures with realistic physics. Common use cases include ships and vehicles, moving platforms, rotating machinery, contraptions that respond to in-game forces, and structures that dynamically assemble and disassemble.Physics simulation
Rapier-based rigid-body physics with gravity, drag, buoyancy, friction, and restitution — configurable per block via datapacks.
Entity tracking
Players and entities standing on sub-levels move with them automatically, including log-out/log-in position persistence.
Constraint joints
Connect sub-levels together with fixed, free, rotary, and generic constraint joints to build complex multi-part machines.
Get started in three steps
Add Sable to your mod
Add the RyanHCode Maven repository and declare a
modApi or api dependency on Sable in your build.gradle. See Installation for the exact snippets for Fabric and NeoForge.Assemble a sub-level
Use
SubLevelAssemblyHelper.assembleBlocks() or gatherConnectedBlocks() to dynamically pull blocks from the world into a new physics-enabled sub-level at runtime.Sable makes extensive use of Mixins and is an intrusive library. Review the compatibility warning before adding it as a hard dependency.
