locomotion

2026-01-02

java

成功=艰苦劳动+正确的方法+少说空话。——爱因斯坦

🚂 Locomotion:把《我的世界》玩家动作“卷到飞起”的实时动画系统

(曾用名:Trainguy’s Animation Overhaul)

Locomotion 是一个为《我的世界》Java 版打造的强力 Mod,目标非常直接:给“实体”和“方块”带来复杂、由玩法驱动的动画,用一个实时动画系统把角色的一举一动都变得更自然、更有张力。它的灵感来源于 Unreal Engine 的 Animation Blueprint——没错,就是那套在游戏里非常好用的“状态机 + 混合空间 + 蒙太奇轨道”的组合拳。

注意:项目仍在“重开发”阶段!你可以自行编译体验,但会看到缺失的动画、占位内容、以及一些用于调试的可视化元素。把它当作“提前试吃”,别把它当作“稳定发售版”。


这货到底想做什么?(一句话版本)

  • 实时、玩法驱动的动画系统。
  • 给玩家的一举一动加上“懂你的”细节:走、跑、跳、攻击、转身、切换装备……都能按“状态”进行自然过渡。
  • 不只是角色,还包括“方块 / 方块实体”动画(后续计划中)。

一句话:这是让动作“像游戏里应有的样子”的一条路,让原本“静态/生硬”的体验变得柔滑、连贯、可调、可扩展。


规划与进度(README 里的官方说法)

状态标记:

  • 🟩 完成
  • 🟨 高优先级
  • 🟥 低优先级
  • ❌ 暂不考虑

核心条目(节选):

  • 🟩 Pose Function System:状态机、混合空间、蒙太奇轨道都要安排上
  • 🟩 PyQT Maya Exporter:Maya 导出工具已支持新格式与比例缩放
  • 🟨 第一人称玩家动画:系统的首个“大强度压测”场景
  • 🟩 游戏内配置界面:在 Mod 中直接调各种关节动画参数
  • 🟥 方块/方块实体动画:后续希望回归(参考早期与 Pollen 的实现)
  • 🟥 第三人称玩家动画:是否在发布版中提供,待定
  • 🟥 回溯支持(Back-porting):视需求而定(考虑到“偏原版”的使用场景)
  • ❌ 同步音效(Synchronised Sound):暂不考虑(避免与其它声音 Mod 互相打架)
  • 🟥 对外开放 API(Open API):先把设计锁死,再考虑开放
  • ❌ 实体动画(广泛覆盖):太大了,一个人短期搞不完;系统会支持,但需要更多资源与角色骨骼
  • ❌ 数据驱动的关节动画器:等设计更稳定再谈

怎么下?怎么装?怎么配?(FAQ 精华)

  • 目前不在 Modrinth / Curseforge 上架。你可以自行编译体验(下文有命令示例)。
  • 面向最新的《我的世界》Java 版进行开发。Bedrock 版不会支持。
  • 回溯到 1.20 / 1.21.1 等旧版本暂不计划:1.21.x 的渲染系统改动太多,先专心稳定新体系。
  • Mod Loader:支持 Fabric 与 NeoForge。
  • 依赖:
    • Fabric 版本:需要 Fabric API
    • 可选:Mod Menu / YACL(用于配置界面)
  • 兼容性:与“偏外观类、贴近原版”的 Mod(如 Essential、3D Skin Layers 等)通常相处融洽;重内容型 Mod 若有自己的玩家交互动画,需看实现情况。
  • 资源包:像 Fresh Animations 这类“改动画”的资源包原则上可以;但“同一动作由两边都改”的情况不能同时生效。

如果 FAQ 有遗漏,去 Discord 上问作者就好!


作者与团队(来自 README)

  • 开发 / 骨骼 / 动画:James Pelter(Trainguy9512)
  • 动画协作:
    • Scott Smoker(Trident 动画)
    • Micah Preciado(剑攻击动画)
    • Austan Todd(斧攻击动画)
  • 贡献者:
    • Marvin Schürz(时间线与缓动系统)
    • The Panda Oliver(Multi-loader 模板)
    • TomB-134、AlphaKR93、LizIsTired、CaioMGT、Superpowers04
  • 特别感谢 Moonflower 团队的支持!

社交与社区:

  • Discord:https://discord.gg/KxqCSGhaFZ
  • 作者 X/Twitter:https://x.com/Trainguy9512
  • Moonflower:https://moonflower.gg/(站点 / Twitter / Discord 链接都在 README)

许可与发布(别踩线)

  • 你可以贡献代码,作者非常希望把它做成一个可用的、可扩展的动画 API。
  • 不能把编译版、Fork、移植版发布到公共平台(Curseforge/Modrinth 等)——除非获得书面许可
  • 许可证链接(在早期仓库):代码部分为 GPLv3,所有资源/非代码资产为 All Rights Reserved。
    License(链接见 README):https://github.com/Trainguy9512/trainguys-animation-overhaul/blob/master/LICENSE

“开盖即食”的体验:自行编译(示例命令)

项目支持自行编译,下面给一套“标准流程”(实际目录与脚本以仓库为准):

1
2
3
4
5
6
7
8
9
# 克隆
git clone https://github.com/Trainguy9512/locomotion.git
cd locomotion

# 常规构建
./gradlew build

# 构建完成后,查看 build/libs 或相应产物目录
# (具体路径以项目的 Gradle 配置为准)

对于 Fabric 版本,记得准备 Fabric API。配置界面可选装 Mod Menu / YACL。


动画系统怎么用?来点“态机 + 过渡”的示意代码(不是仓库源码,仅作概念展示)

这段代码演示“状态机 + 自然过渡”的基本套路:根据玩家速度、地面状态、手上动作,实时切换与混合动画。该示例仅为概念演示,帮助你理解“Locomotion 想做的事”。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
// 示意:一个极简的动画状态机(非仓库源码)
public final class SimpleLocomotionStateMachine {
enum State {
IDLE, WALK, RUN, JUMP, FALL, ATTACK
}

private State current = State.IDLE;
private float blend = 0f; // 0..1 之间,用于平滑过渡

public void update(float speed, boolean onGround, boolean isAttacking, float dt) {
State target = decideTarget(speed, onGround, isAttacking);
if (target != current) {
// 逐步过渡,避免“动作断崖”
blend = Math.min(1f, blend + dt * 6f);
if (blend >= 1f) {
current = target;
blend = 0f;
}
} else {
blend = Math.max(0f, blend - dt * 2f);
}
applyAnimation(current, blend, speed);
}

private State decideTarget(float speed, boolean onGround, boolean isAttacking) {
if (isAttacking) return State.ATTACK;
if (!onGround) return speed > 0.2f ? State.JUMP : State.FALL;
if (speed < 0.1f) return State.IDLE;
if (speed < 0.5f) return State.WALK;
return State.RUN;
}

private void applyAnimation(State state, float blend, float speed) {
// 这里把“状态”映射到具体的动画片段,并做 BlendSpace(例如根据速度在走/跑之间插值)
// 伪代码:
// AnimationClip clip = clips.get(state);
// animator.play(clip, blend);
// animator.setParam("speed", speed);
}
}

如果你做第一人称动画,就可以在玩家的视角里把手臂、武器、身躯的关节做更细的插值,做“蒙太奇轨道”去叠加攻击、交互动作;在第三人称则需要兼顾“外观与同步”。


再来一段“配置驱动”的关节示意(非仓库源码,仅为演示)

Locomotion 支持“游戏内配置”,用于调试不同关节动画器的参数。下面用一个简单的 JSON(概念)展示如何调节关节(如手臂)的摆动频率、幅度与相位:

1
2
3
4
5
6
7
8
9
{
"joint": "right_arm",
"animator": "swing",
"params": {
"frequency": 2.2,
"amplitude": 0.35,
"phase": 0.0
}
}

在 Mod 的配置界面里,你可以把这类参数“拨一拨”,就能立刻看到手臂摆动更自然、更有节奏;不同动作(走/跑/攻击)也可以对应不同的配置快照。


“方块 / 方块实体动画”:让世界也动起来(计划项)

README 里已经把这一项列入计划(🟥 低优先级)。想象一下:

  • 熔炉开合门、箱子弹跳反馈、红石机械部件做“弹性”过渡
  • 某些复杂方块实体(比如带运动的装置)可以有富有表现力的动画

这部分需要“系统成熟后再回归”,但从概念上讲,Locomotion 的实时动画系统天然适合做这类玩法反馈。


适配 & 兼容的现实

  • 目标是“原版风格”(vanilla-ish)为主,不与重改内容的生态硬碰硬。
  • 与外观类 Mod(Essential、3D Skin Layers 等)一般兼容。
  • 资源包如 Fresh Animations 可搭配,但同一动作不要“你我都改”,否则冲突。
  • 配置系统会成为“你自己的手术刀”,根据不同玩法微调关节表现。

想参与?欢迎!

  • Pull Request 欢迎!作者非常重视“把它做成对其它 Mod 友好的动画 API”,任何关于 API 设计的建议都很有价值。
  • 交流:Discord(https://discord.gg/KxqCSGhaFZ)最好用,作者也在上面。

总结:把动作“变得对劲”,是件很酷的事

Locomotion 想做的是“把玩家动作、方块动画做得更像游戏应该有的样子”,兼顾实时性、可配置、与原版风格。它还在路上,但方向很清楚,成果也在一点点成形。如果你关心“动起来的感觉”,这就是你该关注的 Mod。

  • 仓库主页:Trainguy9512/locomotion
  • 社区:Discord(https://discord.gg/KxqCSGhaFZ
  • 许可与规则:代码 GPLv3、资源 All Rights Reserved;未经书面许可,不要发布编译版/移植/Fork 到公共平台
  • 支持:Fabric / NeoForge;Fabric 版本需要 Fabric API,配置界面可选 Mod Menu / YACL

开一局,走两步,摆摆手——你会发现,“动作对了”,游戏就真的更有味了。