
实体碰撞优化器
为Minecraft Fabric服务器提供原版精确的实体碰撞加速。
Entity Collision Optimizer
面向 Minecraft Fabric 服务器的原版精确实体碰撞加速。
English | 简体中文
Entity Collision Optimizer 是一个面向 Minecraft 26.2 的服务端 Fabric 模组,它使用 C++ 原生后端来加速实体查询、推动和移动碰撞,同时默认保留原版实体碰撞行为。在下面的密集实体对比中,其可选的无序模式达到了原版 tick 处理速率的 6.58 倍以及 Lithium 速率的 4.87 倍。安装即可生效;连接的客户端无需安装此模组。
为什么要使用 Entity Collision Optimizer?
拥挤的刷怪场、运输系统以及其他实体密集的建筑可能会将大部分 tick 时间花费在查找附近实体、检查碰撞箱、施加推动以及处理与方块的移动碰撞上。Entity Collision Optimizer 仅专注于这部分工作。它不会尝试优化 AI、寻路、区块生成、网络或客户端渲染,因此你所看到的提升取决于你的服务器执行了多少碰撞工作。 这不是碰撞限制器,也不是近似模拟。在默认的有序后端下,原版实体产生相同的候选项、顺序相同,运行相同的碰撞规则,并在与 Mojang 实现相同的时机发布每次速度或移动更新。该算法不会随实体密度而变化,也从不丢弃候选项。游戏内对比
下面的截图使用相同的密集僵尸猪灵围栏和相同的测试条件。实时 tick 叠加层报告了以下结果:| 配置 | MSPT | 相对原版的速度 | 相对原版的 MSPT 降低 |
|---|---|---|---|
| 原版 | 268.4 | 1.00× | — |
| Lithium | 198.5 | 1.35× | 26.0% |
| Entity Collision Optimizer | 40.8 | 6.58× | 84.8% |
| 原版 268.4 MSPT |
Lithium 198.5 MSPT |
ECO 40.8 MSPT |
![]() |
![]() |
![]() |
工作原理
Minecraft 将实体存储在区块段中。碰撞查询会遍历相关的区块段,访问 Java 对象,检查它们的碰撞箱,并构建推动或移动代码所需的数据。这简单且灵活,但当许多实体占据一小片区域时,对象访问、临时分配和重复准备会变得非常昂贵。 Entity Collision Optimizer 为每个维度维护一个 C++ 原生碰撞上下文,并在实体被跟踪、移动、跨维度传输或移除时更新它。一个持久的细粒度 XYZ 网格将每次查询缩小到附近的实体。在默认后端中,第二个区块段索引在该空间过滤之后恢复 Minecraft 的区块段遍历和插入顺序,因此保留原版顺序无需对每个结果进行排序。 碰撞代码使用的位置、速度、碰撞箱和同步状态存储于紧凑的共享堆外表中。Java 和 C++ 原生代码操作同一份状态,而诸如Vec3 这样的 Java 对象仅在 Java 代码实际读取它们时才被实体化。候选边界使用 SoA 布局,以便热 AABB 循环能有效利用 CPU 缓存和 AVX2。
对于实体推动,一次原生查询执行空间和规则过滤。使用 Minecraft 标准推动公式的连续实体对随后会被按顺序批量计算,每一对的速度变化对下一对可见。实体特定的原版回调仍在其原始时机运行。对于移动,一个维护中的方块掩码会跳过无法碰撞的位置;Java 仍解析上下文相关的 VoxelShape 值,而原生代码执行大部分几何裁剪、台阶计算和移动积分。
因此,FFM 边界承载的是完整的查询、推动批次或移动操作,而不是为每个候选项在 Java 和原生代码之间来回切换。重力、摩擦、坠落处理、流体、伤害、爆炸、方块效果和世界回调仍保留在 Minecraft 正常的 Java 逻辑中。有关原生模块的边界,请参见 native/README.md。
需求
| 组件 | 要求 |
|---|---|
| Minecraft | 26.2 |
| 模组加载器 | Fabric Loader 0.17.0 或更新版本 |
| 依赖 | 兼容 Minecraft 26.2 的 Fabric API 0.145.4 或更新版本 |
| Java | 25 |
| 操作系统 | Windows、Linux 或 macOS |
| 处理器 | 支持 AVX2 的 x86-64 |
安装
- 安装 Fabric Loader 和 Fabric API。
- 下载 JAR 并将其放入实例的
mods目录中。
--enable-native-access=ALL-UNNAMED
不支持的原生平台或 FFM 初始化失败会报告为错误。模组不会静默回退到其他实现。
配置
模组安装后即启用,无需配置。兼容性
- Lithium 和 Carpet 可与 Entity Collision Optimizer 一起安装。启用时,本模组会接管重叠的服务器碰撞路径,而不是同时运行两种实现。
- Carpet 的
maxEntityCollisions限制被有意忽略。限制碰撞候选项数量不在本模组的范围内。原版的maxEntityCramming伤害规则仍然适用。 - 该模组不会更改存档格式,也不会注册必须同步到客户端的内容。
- 原版实体是兼容性目标。自定义实体或直接替换相同碰撞路径的模组目前不保证可用。
许可证
Entity Collision Optimizer 在 MIT 许可证 下提供。 致谢:本项目受 Accelerated Recoiling 启发,但在目标和实现上均有显著不同。正在加载版本记录…



正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。