# Chunker - 官方支持 & 下载
加入我们的 **Discord 社区** 以获取帮助、支持、问题反馈和讨论!
点击此处加入: **[加入我们的 Discord](https://discord.gg/FUx7fk4PsA)**
#### 支持的 MC 版本:
- Minecraft 1.20.5+
- 需要 Java 21 或更高版本
#### 支持的服务器:
- Spigot, Bukkit, Paper, Pufferfish, Purpur, Leaf, 和 Folia
## 概述
Chunker 的设计比传统的预生成器更高效、更可靠。许多预生成器在内存中跟踪数千个区块,如果服务器崩溃,则可能导致重大的回滚或数据丢失。相比之下,Chunker 只跟踪最少的状态(例如当前区域的位置和已完成区块的数量),因此崩溃对生成过程的影响较小。
它在 Paper 分叉上表现最佳,因为它可以使用异步区块加载 (`CompletableFuture`) 来提高性能。在非 Paper 服务器(Bukkit/Spigot 等)上,它会回退到同步区块加载方法,但性能仍然比许多默认解决方案快得多。
您可以配置 Chunker 在没有玩家在线时**自动**运行,并在玩家加入时立即停止。此行为由 `settings.yml` 中的 `auto_run` 控制。您还可以通过更改 `task_queue_timer` 和 `parallel_tasks_multiplier` 来调整每个世界的任务运行强度。如果您想保持服务器负载最小,请设置低并发或仅在服务器空闲时运行。
## 优化的 JVM 启动参数 (`start.bat`):
---
查看 run.bat 源代码
```bash
@echo off
for %%f in (*.jar) do set JAR=%%f
REM Launching Java with Aikar's flags
java ^
-Xms1G ^
-Xmx=30G ^
-XX:+UseG1GC ^
-XX:+UnlockExperimentalVMOptions ^
-XX:G1NewSizePercent=30 ^
-XX:G1MaxNewSizePercent=40 ^
-XX:G1HeapRegionSize=8M ^
-XX:G1ReservePercent=20 ^
-XX:G1HeapWastePercent=5 ^
-XX:G1MixedGCCountTarget=4 ^
-XX:InitiatingHeapOccupancyPercent=15 ^
-XX:G1MixedGCLiveThresholdPercent=90 ^
-XX:G1RSetUpdatingPauseTimePercent=5 ^
-XX:SurvivorRatio=32 ^
-XX:+PerfDisableSharedMem ^
-XX:MaxTenuringThreshold=1 ^
-XX:+OptimizeStringConcat ^
-XX:+UseCompressedOops ^
-XX:+DisableExplicitGC ^
-XX:+AlwaysPreTouch ^
-XX:+ParallelRefProcEnabled ^
-XX:+UseNUMA ^
-XX:ParallelGCThreads=16 ^
-XX:ConcGCThreads=16 ^
-XX:MaxGCPauseMillis=50 ^
-Dusing.aikars.flags=https://mcflags.emc.gs ^
-Daikars.new.flags=true ^
-jar "%JAR%" --nogui
pause
```
- `Xms1G` 和 `Xmx30G` 应更新为匹配您服务器的最小 (`Xms`) 和最大内存 (`Xmx`)。
- 更新 `XX:ParallelGCThreads` 和 `XX:ConcGCThreads` 以匹配您的线程数。
---
## Paper 配置
> **注意:** 在非 Paper 服务器上,**不会**使用异步功能。
> 但是,如果您**在** Paper 服务器上(包括 Pufferfish、Purpur 等),您可以采取额外的步骤来优化预生成:
在您的 `paper-global.yml` (或同等文件) 中,请考虑增加区块生成和 I/O 的并行性:
```yaml
chunk-loading-advanced:
auto-config-send-distance: true
player-max-concurrent-chunk-generates: -1
player-max-concurrent-chunk-loads: -1
chunk-loading-basic:
player-max-chunk-generate-rate: -1.0
player-max-chunk-load-rate: -1.0
player-max-chunk-send-rate: -1.0
chunk-system:
gen-parallelism: default
io-threads: 16
worker-threads: 16
region-file-cache-size: 16
```
- **调整** `io-threads` 和 `worker-threads` 以匹配(或接近)您的 CPU 的线程数。
- 默认情况下,Paper 只使用一半的线程进行区块任务;提高这些线程可以帮助确保异步区块生成以全速运行。
- 在新世界预生成时,将 `region-file-cache-size` 设置为低值,且没有玩家在线。
## 命令用法
主要的命令是:
```text
/pregen
/pregenoff [world]
```
### 示例
1. `/pregen 4 10s world default`
- 预生成主世界 (`world`)
- 使用 4 个并行的区块加载任务(在 Paper 中,这些任务是异步的)
- 每 10 秒打印进度日志
- `default` 使用世界边界作为半径
2. `/pregen 6 5s world 1000b`
- 预生成主世界
- 6 个并行任务
- 每 5 秒打印日志
- **1000b** = 1000 方块半径 → Chunker 计算 `(1000 / 16)²`
3. `/pregen 2 2m world_nether 500c`
- 预生成下界
- 2 个并行任务
- 每 2 分钟打印日志
- **500c** = 500 个区块半径 → `500 × 500 = 250,000 个区块`
4. `/pregen 1 12h world_the_end 100r`
- 预生成末地
- 1 个并行任务
- 每 12 小时打印日志
- **100r** = 100 个区域半径 → `(100 × 32)² = 10,240,000 个区块`
5. `/pregenoff [world]`
- 无参数 = 停止所有世界
- 带世界名称 = 仅停止该世界
### 命令参数
- **ParallelTasksMultiplier**: 确定并行运行的区块加载任务数量。在 Paper 上,这些任务是异步的。 建议:保持在或低于您的 CPU 线程数以下。
- **PrintUpdateDelay**: 进度日志出现的频率。 添加后缀 `s`、`m` 或 `h`。
- ****: 要预生成的区域。 支持自动补全。
- ****: 目标半径,带后缀:
- `b` – 方块(例如 `20000b`)
- `c` – 区块(例如 `500c`)
- `r` – 区域(例如 `30r`)
- `default` – 使用世界边界
- **/pregenoff [world]**:
- 无参数 = 停止所有世界
- 带世界名称 = 仅停止该世界
## 权限
(默认是 OP)
- `chunker.pregen` – 允许使用 `/pregen`
- `chunker.pregenoff` – 允许使用 `/pregenoff`
- `chunker.*` – 授予所有 Chunker 权限
## 配置: settings.yml
```yaml
world:
auto_run: false
task_queue_timer: 60
parallel_tasks_multiplier: auto
print_update_delay: 5s
radius: default
world_nether:
auto_run: false
task_queue_timer: 60
parallel_tasks_multiplier: auto
print_update_delay: 5s
radius: default
world_the_end:
auto_run: false
task_queue_timer: 60
parallel_tasks_multiplier: auto
print_update_delay: 5s
radius: default
```
## 快速提示
1. 从 `parallel_tasks_multiplier = 1` 开始,然后进行调整。
2. 异步加载(Paper 和 Folia)= 更好的性能。
3. 使用 `print_update_delay` 为 10s+,以避免在长时间运行期间产生过多的日志输出。