大型模拟模组的确定性 DES 基石库。 让「观察某区域」等价于「该区域从创建起一直被连续模拟」——支持数百万区域规模, 玩家完全感知不到「区块卸载」。给殖民地 / 帝国 / 大世界类 Minecraft 模组当底层引擎。
许可 MIT · 状态 0.1.0 · 平台 纯 Java 21(核心零 MC 依赖)+ Fabric 参考绑定(MC 1.21.11)
Aevum 是一个库,不是开箱即玩的模组。它解决一个具体的硬问题:
原版 Minecraft 只 tick 已加载的区块。所以远方的工厂会停产、运输队会冻结、战争只在玩家在场时发生。 现有方案(强制加载区块)在「数百万 km²」尺度上会爆内存。
Aevum 的反转:世界的真相是一条全局确定性事件时间线,方块只是它在某地某刻的缓存。 玩家能看到的永远已物化;看不到的退化成离散事件模拟 + 惰性数学。一旦观察,所见与「一直在模拟」逐位相同。
你写领域逻辑(什么是城市、兵怎么打、货怎么运),Aevum 负责让它在百万区域尺度上确定性地、不被卸载阻塞地推进。
| 主张 | 证据 |
|---|---|
| 成本 ∝ 锥内事件数,与世界规模无关 | 远程压测:固定 5000 事件/tick,区域 5M→10M→20M,中位耗时 4.38→4.67→5.65ms 几乎不变 |
| 数百万 km² 持续运行 20 TPS | 2000 万抽象区域稳态 ≤7ms/tick(占 50ms 预算 14%),等效 20 TPS 不掉 |
| 观察即模拟,物化可见 | bot 进真实 MC 1.21.11 服务端:seeded 0→12,金块柱出现在 (8,-60,8),离开后状态保留 |
| MC 服务端稳态 20 TPS | bot 瞬移 seed 1078 区域后,900 tick/45s = 20.00 TPS |
| 客户端内存与世界规模解耦 | 1000 标记从 100 km² 到 1 亿 km²,序列化字节数完全相同 |
| 确定性 / 崩溃恢复 / 战争一致 | 144 判定性测试全绿(6 模块),含跨 JVM WAL 恢复、无观察战斗==在场 |
dependencies {
implementation("dev.aevum:aevum-core:0.1.0") // 内核 + 公共 API
}// 1) 你的领域状态
class MyWorld implements WorldState { /* 城市/库存/军队... + commitHorizon + stateHash */ }
// 2) 构造引擎
Simulation sim = Aevum.builder(worldSeed, new MyWorld())
.cone(regionSpace) // 大规模因果锥裁剪;或 .global() 作参考
.build();
// 3) 调度领域事件 + 玩家观察时提交
sim.schedule(new MyEvent(fireAt, sim.nextEventId(), regionId));
sim.observe(playerRegion, currentTick); // commit-on-observe:该区域追算到 currentTick完整集成步骤见 docs/INTEGRATION.md。
| 模块 | 内容 |
|---|---|
| aevum-core | DES 内核(全局参考 + 因果锥裁剪)、确定性数学(定点/RNG/128 位距离)、公共 API 门面(Aevum/Simulation)、轨迹拦截、空间索引、T3 战略快照 |
| aevum-model | 节点经济:生产/消费/库存,闭式推进 + 边界事件 |
| aevum-logistics | 跨区物流闭环:产→运(时延)→消,物料守恒 |
| aevum-store | 持久化:WAL(内存+磁盘,CRC32)、快照、事件队列序列化(P1-P4 恢复=重放) |
| aevum-war | 战争:时空拦截广相、确定性战斗、围城援军、AI 侦察迷雾、自驱动 |
| aevum-materialize | 物化:蓝图+增量、预算分片调度、地平线预物化、去物化捕获、datapack API |
| aevum-fabric | MC 1.21.11 Fabric 参考绑定(ServerTick 驱动 + 物化 + T3 网络 + 客户端地图 HUD) |
下游接入时必须遵守,否则「观察 == 连续模拟」会穿帮:
- A 确定性 — 定点数学 + seeded RNG + 有序容器,stateHash 可复现
- B 完整调度 — 任何未来效果在起因处即 schedule(出发即预约)
- C 观察即提交 — 只通过
observe读区域状态,观察不改变结果,只强制计算 - D 因果锥有界 — 定义合理 maxSpeed,cone 裁剪才正确
- docs/INTEGRATION.md — 模组开发者集成指南(从这里开始)
- docs/IMPLEMENTATION-AUDIT.md — 架构 vs 实现的逐项深度审计 + 性能实测数据
- docs/00-whitepaper.md — 白皮书:动机、公理、不变量
- docs/01–07 — 各子系统设计
# 测试(纯逻辑,144 全绿)
./gradlew test
# 发布到本地 Maven 供下游依赖
./gradlew publishToMavenLocal需 JDK 21。Fabric 绑定(aevum-fabric)需 Loom + MC 1.21.11,单独构建。