Chunker

快速高效的异步 Minecraft 世界生成器

资源图片
# 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+,以避免在长时间运行期间产生过多的日志输出。