- New /dimensionalripper teunwhitelist <regname> removes a modded block entity from the parallel whitelist, restoring its default forced-serial processing; reports whether it was actually present - SerDesFilter.unwhitelistModded now returns boolean (removal success) - README: document whitelist/teunwhitelist commands and clarify the built-in blacklist is hardcoded, not command-editable
84 lines
5.0 KiB
Markdown
84 lines
5.0 KiB
Markdown
# 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`),黑名单内置不可命令修改;第三方模组 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。
|
||
|