File Details
Initial Release
- R
- Apr 25, 2026
- 171.23 KB
- 18
- 1.21.1
- NeoForge
File Name
sabledestructive-1.0.0.jar
Supported Versions
- 1.21.1
Curse Maven Snippet
First public release of Sable: Destructive — a NeoForge 1.21.1 add-on for Sable that finally lets physics blocks break.
Core mechanics
- Universal collision callback wired into every Sable physics block.
- Real kinetic-energy model (mass × v²) decides the outcome of every impact.
- Two destruction modes:
- DETACH (~90%) — affected blocks break off as a smaller independent physics sub-level and keep flying.
- VANISH (~10%) — blocks pulverize into particles + sound when energy exceeds the material's pulverize threshold.
- Outcome is biased by physics: energy ratio, brittleness, and a safety speed ceiling — chances only set the baseline tendency.
- Cluster detach: blocks can break off in chunks, not strictly one at a time.
Block data
- Full mass + toughness table for all 1.21.1 vanilla blocks.
- Modded blocks default to a fragile clay-tier (clamped to 80–1500 kg, ≤6 m/s break speed) so unknown blocks never become indestructible bricks.
- F3 + H tooltip shows "Mass: X kg" and "Impact strength: Y m/s".
Explosions and terrain
- TNT, creepers, end crystals and other vanilla explosions now damage Sable sub-levels through the same path.
- World terrain is also affected, but only via VANISH (never DETACH), so the world never turns into a runaway physics sim.
- Bedrock, barriers, unbreakable blocks and block entities are skipped on the terrain path.
- Toggle terrain damage with the affectOnlySubLevelBlocks config flag.
Visual + audio (fancy VANISH effect)
- 3-layer particles: block-dust with the actual block texture, POOF, and CRIT chips.
- Block break sound + soft "whump".
- Per-tick budgets: 600 particles, 32 effects.
- Spatial + temporal dedup so big simultaneous breaks don't audio-clip.
- Auto-scaling under backpressure; falls back to vanilla levelEvent(2001) if overloaded.
- Toggle with effects and fancyVanishEffect config flags.
Stability and crash safety
- Lock-free offer queue with atomic size counter and epoch-XOR dedup ring (8192 entries).
- Per-tick offer cap (1024) to keep the hot path bounded.
- DETACH is always deferred to a safe inter-tick window — never executed while Sable's physics system is mid-step (this was the historic native-crash trigger).
- Snapshot + rollback, global crash guard, shutdown hook, emergency disable.
- NaN / Inf sanitisation on all impact data and kick velocities.
- Cluster BFS strictly stays within one parent sub-level — no cross-boundary clusters.
- Lifecycle reset on server start / stop / level unload.
Runtime control (op level 2)
- /sable-dv on | off | toggle | status
- /sable-dv config list
- /sable-dv config get <name>
- /sable-dv config set <name> <value>
- /sable-dv config reset <name>
- All tunables are reflected automatically with type coercion and tab-suggest.
Defaults
- enabled = true
- chanceDetach = 0.90, chanceVanish = 0.10, physicsBiasStrength = 0.6
- pulverizeEnergyRatio = 6.0, cleanDetachEnergyRatio = 1.5
- minBreakSpeed = 6.0, absoluteMaxSpeed = 350, detachSafeSpeedCeiling = 100
- maxDetachesPerSecond = 8, maxActiveDetachedSubLevels = 48, detachCooldownMs = 25
- affectOnlySubLevelBlocks = false
- effects = true, fancyVanishEffect = true
Requirements
- Minecraft 1.21.1
- NeoForge 21.1.227+
- Sable 1.1.3+
Credits
- Code: Xylos_Official
- Visuals: Viaquelt
- Built on top of Sable by ryanhcode
License
- MIT