Sable: Destructive

Sable: Destructive

Sable:破坏效果让Sable物理方块真正碎裂。真实的动能、惯性穿透、基于密度的自损、重击时的径向冲击波——快速锤击能深入泥土,软锤击石时碎裂,巨大落差产生扩散效果。

Sable: Destructive

Sable: Destructive 是 NeoForge 1.21.1 的一个附加模组,适用于 Sable,它将物理方块变成了可以真正被摧毁的东西。将飞船撞向地面,在飞行基地旁引爆苦力怕,或者向坦克投掷末影水晶——Sable 的子层级现在会以应有的方式对暴力做出反应:碎片飞溅,脆弱材料粉碎,强化材料屹立不倒。


功能概述

开箱即用时,Sable 能为您提供模拟效果精美的物理方块,但它们实际上坚不可摧。此附加模组直接接入 Sable 的碰撞和爆炸回调,并在每次有意义的撞击时,决定受影响的方块应:

  • 分离 (DETACH) —— 崩解为更小的、独立的物理子层级。碎片会继续飞行、翻滚并独立碰撞。
  • 消失 (VANISH) —— 粉碎为粒子 + 声音,并带有多层破碎效果。当能量高到足以真正粉碎材料时使用。

这两者之间的选择并非简单的掷骰子,而是由真实物理规律决定:

  • 接触点的动能(质量 × v²)与材料韧性的比较。
  • 方块脆性(树叶和草会粉碎;黑曜石和下界合金则能抵抗)。
  • 一个安全速度上限,防止过快撞击产生无限多的子层级。

您可以通过 F3 + H 在游戏中直接查看底层数据:

韧性: 20 单位

(在适用情况下也会显示质量/冲击强度诊断信息)


特性

  • ✅ 为所有 1.21.1 方块提供完整的冲击处理,并配有合理的质量 + 韧性表。
  • ✅ 模组方块默认归入易碎类别(黏土级),这样未知方块不会成为坚不可摧的砖块。
  • ✅ 原版爆炸也经由同一路径处理:TNT、苦力怕、末影水晶、下界中的床 都会对 Sable 子层级造成伤害。
  • ✅ 世界地形也会受到影响,但仅通过消失(VANISH)方式(绝不会分离/DETACH),因此世界不会变成失控的物理模拟。有一个配置选项可限制伤害仅作用于子层级方块。
  • ✅ 华丽的消失(VANISH)效果:多层粒子(带有实际方块纹理的方块灰尘、砂砾、冲击波尘埃)+ 破碎声 + 沉闷的撞击声,并配有严格的每 tick 预算,因此大规模破碎不会拖垮您的 FPS。
  • ✅ 子层级特效 (2.0.0):尘埃和砂砾会附着在飞船上——数据包携带场景局部坐标,客户端会将粒子嵌入实时的子层级姿态中。
  • ✅ 防崩溃设计:所有对 Sable 的原生调用都被包装、延迟到安全的 tick 间窗口执行,并防止 NaN/Inf、步进中途变更、跨父级集群错误以及组装进已移除场景的竞态条件。
  • ✅ 集群分离:方块可以成块崩解,而非严格地一次一个,以实现电影般的破坏效果。
  • ✅ 游戏内配置面板 (2.0.0):/sable-dv config panel 命令可打开 GUI——大多数可调项无需重启即可生效。
  • ✅ 持久化配置 位于 config/sabledestructive-common.toml。数值在重启后保留;磁盘编辑支持热重载。
  • ✅ 手工调整的方块表:覆盖约 70 种最相关的 1.21.1 方块——每种木材和整个石头家族——都有各自独立的质量和韧性,而非统一归入“木头”或“石头”类别。樱桃木比橡木软。苔石砖比新石砖更早出现裂纹。台阶、楼梯、墙、栅栏、门、活板门、告示牌各有独立的条目。其他原版方块则继续使用现有的分类流程。
  • ✅ 惯性穿透:撞击不再止步于第一个方块。攻击者的动能会沿着运动方向,被每个被消耗方块的破坏成本(0.5 · m · v_thr²)逐块消耗。一把黑曜石锤子能在泥土中砸出深坑,却只能在石头上留下划痕——这一切都是自动完成的。
  • ✅ 真实伤害:速度会缩放穿透深度和能量预算,并且密度确实重要——柔软的攻击者不再能假装打破坚硬的表面。
  • ✅ 自身损伤:当攻击者比防御者软得多时,防御者幸存,同时攻击者会磨损自己的接触面。铜锤 vs 黑曜石墙:铜被磨损,墙屹立不倒。
  • ✅ 真实子层级质量:破坏判定和冲击波强度会直接从 Sable 自身的质量追踪器读取每个子层级的实际质量(千克)——与 Rapier 用于物理体的数值完全相同。堡垒会因惯性而碾压,而扔出的鹅卵石则会从石头上弹开。结构韧性门槛还会获得一个 sqrt(refMass / realMass) 的减免因子(下限为 10 倍),因此一个由压实泥土构成的 100 吨破碎机可以粉碎石头,但任何质量的果冻状子层级都无法剥离基岩。
  • ✅ 冲击波:仅在真正重大的接触时触发。强度由真实子层级质量 × 平均韧性常数决定。径向尘埃爆发、一股高大、缓慢升起的半透明尘柱(蘑菇状,数秒内沉降),外加一声沉重的撞击声,并具有按来源去重和每 tick 粒子预算。半径和韧性上限都随强度的立方根缩放——小冲击波撕碎树叶,巨大冲击波能凿出真正的弹坑。
  • ✅ 通用韧性门槛:无限韧性(基岩、屏障、命令方块、末地传送门框架、结构方块)会被拒绝,原版 getDestroySpeed < 0 会被拒绝,攻击者 vs 防御者的韧性比率会强制执行(软攻击者无论多快都无法打破硬防御者——它会转而磨损自己的接触面),并且一个原始的速度 vs breakSpeedMs 门槛会过滤掉微不足道的碰撞。子层级内的基岩实际上是不可破坏的。
  • ✅ 球形集群分离:集群规划器使用距离排序的优先队列,并以种子点为中心设置严格的切比雪夫半径上限(ceil(cbrt(targetSize))),因此即使在薄板上,集群也能保持大致球形,且单方块接触绝不会产生一条线。
  • ✅ 本地化提示信息 (F3+H):韧性: N 单位 / 韧性: 不可破坏 支持英语、俄语、德语、西班牙语、法语、葡萄牙语(巴西)、意大利语、波兰语、日语、韩语、简体中文和繁体中文。
  • ✅ 点积入射角:擦过式打击确实只会擦过。伤害随 (v · n)² / |v|² 缩放——在以相同速度撞击时,侧向擦过墙壁造成的伤害只是正面撞击的一小部分,并且有一个可配置的下限,确保其永远不会为零。
  • ✅ 分离/消失平衡:配置面板和 TOML 文件中的可调项控制着方块剥落与粉碎的频率、能量偏好、速度上限,以及是否影响世界地形。

命令

所有命令都需要管理员等级 2。

/sable-dv on                 启用系统
/sable-dv off                禁用系统
/sable-dv config panel       打开游戏内配置 GUI(仅限玩家)
/sable-dv config reset       将所有可调项重置为 2.0.0 默认值

/sable config panel          别名 — 相同的配置 GUI

可调项(分离几率、物理偏好、速度上限、冲击波、特效预算、affectOnlySubLevelBlocks 等等)可在配置面板或 config/sabledestructive-common.toml 文件中编辑。


性能

设计目标是在无事发生时保持安静,在全场混乱时也不会崩溃:

  • 无锁提供队列,带有原子大小计数器和 epoch-XOR 去重环。
  • 每个 tick 对提供量、消失粒子和消失效果设有上限。
  • 对效果进行空间 + 时间去重,因此大规模破碎不会导致音频重叠。
  • 在背压情况下自动缩放;如果高级效果管线过载,则回退到原版 levelEvent(2001)。
  • 分离(DETACH)总是延迟到安全的 tick 边界执行——绝不在 Sable 物理系统步进中途执行。

需求

  • Minecraft 1.21.1
  • NeoForge 21.1.235+
  • Sable 2.0.3+(必需依赖——没有它,此附加模组实际上什么也不做)
  • Sable Companion + Veil(根据您的 Sable 安装要求)

兼容性

  • 服务端 + 客户端。效果在客户端侧;破坏逻辑本身在服务端运行。
  • 应与大多数其他模组兼容。模组方块会自动归类到安全的易碎等级。
  • 依赖 Sable 2.x 的 Create Aeronautics / Offroad / Simulated 堆栈在依赖层面受支持;如果仍出现竞态条件,请附上完整日志报告崩溃。

已知限制

  • 基岩、屏障和不可破坏方块会被跳过(设计如此——BlockToughness.Entry.UNBREAKABLE 和通用韧性门槛确保它们即使在子层级内也能幸存)。
  • 方块实体(箱子、熔炉、Create 的齿轮等)优先选择消失(VANISH)路径——如果强制将它们剥离到新的子层级中,可能会损坏模组侧的网络状态。
  • 分离遵循 Sable 的父级边界——集群绝不会跨越子层级。
  • 拒绝分离到已移除的父级中;剩余的碎片会消失,而不会使 Sable 的热图组装器崩溃。

致谢

  • 作者 / 代码:Xylos_Official
  • 视觉设计:Viaquelt
  • 基于:由 ryanhcode 开发的 Sable

MIT 许可证