波浪鞘翅

波浪鞘翅

让你的鞘翅拥有活甲虫外壳般的质感——坚硬、易碎、微微颤动。

Wavey Elytra 让鞘翅表现得像薄而坚硬的翅鞘,而不是布制披风。翅膀保持刚性并以铰链驱动,高速时会颤动,俯冲时收拢,转弯时差动滚转,翼尖略微滞后——就像有真实质量和弹性的东西。可选地,当模组安装在服务器上时,扇动会给你真正的推进力。


特性

  • 🪲 甲壳物理 — 刚性铰链姿势,而非披风式柔软摆动。快速、僵硬、轻微的扑动,带有一丝弹性翼尖滞后。
  • 🌀 双频扑动 — 10 Hz 的微颤叠加在 2.2 Hz 的可见波动之上,两者都随空速缩放。带来速度感,而非噪声。
  • 🫁 呼吸式开合 — 滑翔时以缓慢的 0.9 Hz 开合,让轮廓本身也在运动。
  • 🏹 速度驱动收紧 — 飞得越快,翅膀收拢得越紧,最多可达 12°。
  • ✈️ 副翼滚转 — 转弯时两侧翅膀向相反方向倾斜(最多 11°),就像真正的副翼对。
  • 🪂 失速抬头 — 速度过慢时翅膀会向上抬起(最多 9°)。
  • 🛑 刚性俯冲 — 原版在垂直俯冲时会收回翅膀,模组在此处刻意保持安静。不会对折叠的翅膀产生虚假的抖动。
  • 🌬️ 闲置生命力 — 站立时翅膀缓慢呼吸,每隔几秒抽动一次,就像刚被戳了一下的甲虫。
  • 🥷 潜行收拢 — 潜行时翅膀平贴背部(25°)并停止所有动作。
  • 👏 扇动脉冲 — 滑翔时按跳跃键,翅膀会猛地扇动 45° 并带有弹性回弹。
  • ⚡ 服务端扇动推进(可选) — 当模组安装在服务器上时,扇动会真正推你向前。可用游戏规则开关,默认开启。
  • ⚙️ 完全可配置 — 每个振幅、频率和增益都暴露在 JSON 配置中。

工作原理

模组只改变翅膀姿势——它从不接管渲染。它在 ElytraModel.setupAnim 末尾为左/右翅膀部件添加相对旋转。

正是这一设计选择使其具备广泛的兼容性:像 3D Cape 这样的模组在构建网格时会读取这些翅膀姿势,因此它们会自动继承本模组的物理效果——而本模组也从不覆盖它们的输出。这也意味着模组不会触碰网格、UV 或其他鞘翅模组所依赖的旋转轴。

物理核心刻意采用零 Minecraft 依赖的纯数学实现(滤波器、正弦、包络),并基于部分插值的 ageInTicks 计时,因此效果帧率无关。

依赖

必需

  • Fabric API — 用于游戏规则注册、网络通信和服务器事件。

可选(集成 / 共存)

  • 3D Cape — 3D 鞘翅会自动继承本模组的物理效果。
  • WaveyCapes — 它处理披风,本模组处理鞘翅;两者互不干扰。
  • Elytra Physics — 可协同工作;那个模组改变展开目标,本模组在其上添加增量。
  • elytraslot — 装备在专用槽位中的鞘翅获得相同的物理效果。
  • 3D Skin Layers — 可共存(本模组不调用其 API)。

安装

  1. 为 Minecraft 1.21.1 安装 Fabric Loader。
  2. 安装 Fabric API(必需)。
  3. 将 waveyelytra-1.0.0.jar 放入你的 mods 文件夹。
  4. 可选:如果你想在多人游戏中获得扇动推进,在服务器上安装同一个 jar。

服务端(可选)

这是一个双端模组:

服务器 客户端 结果
✔ ✔ 完整:扇动会推进你,且所有装有客户端模组的玩家都能看到扇动动画。
✔ ✘ 推进仍然生效,但没有人能看到动画。
✘ ✔ 仅动画——纯视觉效果,没有推进。

游戏规则

规则 默认值 描述
waveyElytraFlapBoost true 扇动推进的总开关。设为 false 会同时禁用推进和扇动动画。

/gamerule waveyElytraFlapBoost false

⚠️ 这是一个玩法改动。 启用后,鞘翅可以通过扇动保持飞行,而不必消耗烟花。不希望如此的服主可以用上面的命令将其关闭。

配置

编辑 config/waveyelytra.json。旁边会生成一个 waveyelytra-README.txt,描述每个键。编辑后请重启游戏。

滑翔

键 默认值 描述
sweepMaxDeg 12.0 全速时的最大收紧角度(度)。
breatheHz / breatheDeg 0.9 / 1.5 滑翔呼吸频率(Hz)和振幅(度)。
flutterHz / flutterAmpDeg 10.0 / 2.0 快速扑动频率和振幅。
flutterSlowHz / flutterSlowAmpDeg 2.2 / 2.4 慢速扑动频率和振幅。
flutterSpeedRef 0.6 达到完整扑动所需的水平速度(方块/刻)。
dihedral 1.0 上反角增益(基础 3°)。
aileronGain 1.0 副翼增益(基础 11°)。
stallNoseUp 1.0 失速抬头增益(基础 9°)。
tipLag 1.0 翼尖滞后强度。

扇动

键 默认值 描述
flapDeg 45.0 扇动峰值振幅(度)。包络已归一化,因此这就是真实最大值。
flapDurationSec 0.28 一次扇动的时长(秒)。
flapDecay 7.0 阻尼——越大意味着余振越少。
flapHz 3.5 余振频率。
flapPitchDeg 5.0 扇动期间的额外抬头角度。

闲置 / 潜行

键 默认值 描述
idleBreatheHz / idleBreatheDeg 0.29 / 2.0 闲置呼吸频率和振幅。
idleTwitchMinSec / idleTwitchMaxSec 2.0 / 6.0 随机抽动间隔范围(秒)。
idleTwitchDeg 3.0 抽动振幅。
walkBobDeg 1.5 行走摆动振幅。
crouchIdleScale 0.0 潜行时的闲置效果缩放(0 = 完全静止)。
crouchTuckDeg 25.0 潜行时的收拢角度。

仅服务端

键 默认值 描述
boostStrength 0.28 沿你视线方向的扇动推进(方块/刻)。原版烟花大约为 0.6–0.7。
boostLift 0.06 推进的垂直分量。

通用

键 默认值 描述
enabled true 总开关。
masterGain 1.0 全局增益——一次性缩放所有效果(0 = 完全原版)。

常见问题

我需要把它装在服务器上吗? 不需要。不装的话,模组只是纯视觉效果。只有当你希望在多人游戏中获得扇动推进时才需要在服务端安装。

其他玩家能看到我的扇动吗? 安装了该模组的玩家能看到。其他所有人看到的是原版鞘翅。

如何关闭推进? /gamerule waveyElytraFlapBoost false。这也会停止扇动动画,因为扇动正是为了表达推进而存在的。

它会与其他鞘翅模组冲突吗? 它的设计就是不会。模组从不接管渲染,从不触碰网格,只在其他模组同样写入的翅膀旋转上叠加——因此 3D Cape、WaveyCapes、Elytra Physics 和 elytraslot 都可以一起安装。

为什么我垂直俯冲时它不颤动? 这是刻意的。原版在垂直俯冲时会收回翅膀,给折叠的翅膀添加动作看起来明显很假。

我改了配置但什么都没发生。 配置在启动时读取——请重启游戏。

致谢

  • 灵感来自"鞘翅 = 硬化甲壳,而非布料"的理念,其构建目标是与现有的鞘翅/披风生态共存,而非取代它们。
  • 特别感谢 3D Cape、WaveyCapes、Elytra Physics、elytraslot 和 3D Skin Layers 的作者们,他们提供了值得为之设计的兼容面。