Files
DimensionalRipper/README.md
T

84 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Dimensional Ripper
Dimensional Ripper 是一个基于 **NeoForge 1.21.1** 的多线程维度并行优化模组。它通过独立维度 tick 循环与细粒度并行调度,充分利用多核 CPU 提升服务端性能,同时保持稳定的 20 TPS。
## 优化范围(均为服务端运算,不影响客户端画面/渲染)
### 🗺️ 维度
- **维度并行 tick**:主世界/下界/末地/自定义维度各一个独立循环线程同时跑,一个维度卡顿不拖累其它维度。
- **保存独立接管**:存档保存流程单独处理,防止存盘时整服冻结。
### 👾 实体(优化重点)
- **实体 tick 并行**:村民、动物、怪物、掉落物等原版生物按 ID 分几十片多线程同时 tick(ShardGate 分片掉拍:单片慢只拖自己,不阻塞全局屏障)。
- **存储结构并发化**:实体查找表、区块内实体表、section 容器全部换成无锁并发集合,消除读锁排队。
- **村民 AI 特化**:大脑(Brain)、最近实体传感器、寻路、找床/找工作点、抢职位竞争、八卦消息全部做了多线程安全加固。
- **碰撞优化**:实体间碰撞默认关闭(`nocollide`,省去 O(n²) 开销),碰撞查询本身并行执行。
- **跨维度传送**:换维度处理重定向到正确线程,避免跨线程状态错乱。
- 压测数据:约 1.9 万村民场景下 TPS 从 9 提升到 20(16 核)。
### 🧱 区块 / 世界
- **区块环境并行**:每个区块的随机 tick(植物生长、水流、岩浆、红石脉冲)按区块坐标分片并行跑。
- **调度并发化**:区块加载/卸载、DistanceManager ticket 管理、计划刻调度(LevelTicks/BinaryHeap)全部线程安全。
- **爆炸**:统一串行执行,防止并发写坏区块数据。
### ⚙️ 方块实体(机器)
- **机器 tick 并行**:熔炉、箱子、信标等原版方块实体的 tick 按位置分片并行。
- **POI 并发化**:村民找床/找工作点查询不再排队等锁。
- **方块更新/掉落/游戏事件**:收集器、掉落物捕捉、游戏事件分发重定向到正确线程。
- **保守串行清单(黑名单)**(有意为之,非未实现):漏斗/投掷器/发射器/雕刻书架/合成器/蜂巢(跨容器 5×5 访问、共享 Level 级随机源,并行会数据竞争,见 [SerDesFilter.BLACKLIST](https://github.com/xxdd001/DimensionalRipper/blob/main/src/main/java/dev/modzuozhi/core/filter/SerDesFilter.java)),黑名单内置不可命令修改;第三方模组 TE 默认串行,可用白名单指令放行(见下)。
### 🎒 物品
- 物品本身无独立并行优化(合成、堆叠仍走原版逻辑);掉落物作为实体参与并行 tick,方块掉落物在正确线程处理。
## 其它特性
- **异步传送门传送**:支持原版下界/末地传送门与模组维度(如暮色森林、以太)传送门的异步预加载与渐进生成,避免传送到未加载区块导致的卡顿、冻结与虚空传送。
- **区块预取**:根据玩家位置与朝向预加载区块,加快跑图时的区块加载速度。
- **故障降级**:内置看门狗与故障熔断机制,异常时安全降级回原版串行 tick,保障服务器长期稳定运行。
## 环境要求
- Minecraft **1.21.1**
- NeoForge **21.1.x**
- JDK **21**
## ⚠️ 兼容性警告
> **不兼容警告**:本模组**不建议与任何其他多线程优化模组或跨维度交互类模组同时使用**。经实际测试,与这类模组共同加载会发生冲突并导致游戏崩溃。若需使用本模组,请单独加载,或移除其它多线程优化模组 / 跨维度交互模组。
## 指令
| 指令 | 说明 |
|------|------|
| `/dimensionalripper status` | 查看当前状态、TPS、各开关与掉拍分片统计 |
| `/dimensionalripper fine on\|off` | 开关维度内细粒度并行(实体/方块实体/区块环境) |
| `/dimensionalripper fine sharded on\|off` | 开关分片并行(实体/TE/区块环境,ShardGate,默认开启) |
| `/dimensionalripper nocollide on\|off` | 开关实体碰撞优化(默认开启) |
| `/dimensionalripper tewhitelist <注册名>` | **白名单**:将指定第三方模组方块实体(TE)加入并行白名单放行(如 `stresskit:heavy_furnace`) |
| `/dimensionalripper teunwhitelist <注册名>` | 从并行白名单移除该 TE(恢复默认强制串行;重启服务器也会自动清空白名单) |
> **白名单说明**:第三方模组 TE 默认串行处理(保守策略),加入白名单后才会进入并行分片管线。黑名单(漏斗/发射器等原版保守串行 TE)为内置硬编码,**不支持命令添加/移除**。
模组**默认启用**多线程与分片并行,开箱即用,无需额外配置。
## 构建
```bash
./gradlew build
```
构建产物位于 `build/libs/` 目录。
## 设计说明
本模组的设计思想借鉴了 Folia、MCMT、Chlorophyll 等项目的多线程调度方案,但全部代码基于 NeoForge API 独立实现,不包含任何 GPL 代码。
## 许可证
[MIT License](LICENSE) © 2026 xxdd001
---
> **AI 生成声明**:本 README 说明文档由 AI 辅助生成,使用的 AI 为 DeepSeek-V4-Flash。