区块预生成器

区块预生成器

高效生成你的世界

Discord 在 Patreon 上支持我维基百科-点击我需要 CarbonConfig 
区块预生成器是一款能够更高效地生成世界的工具,通过预先生成区块来实现。它是一款服务端工具,如果愿意,也可以启用一些可选客户端功能。
它也适用于单人游戏。

 

常见问题解答 / 文档 / 已知问题及修复方法。
可以在此页面顶部的维基百科中找到。

 

功能特性:

非常友好的用户界面:
区块预生成器拥有许多功能,使其对用户非常友好,例如:
每个命令的完整文档,
根据需要提供命令参数的自动补全/建议以提供指导,
改进的日志记录,采用颜色编码和结构化显示,
比纯文本更易于使用的可选 UI 功能。

多线程世界生成:
区块预生成器使用多核来生成维度。
这是通过对 Minecraft 的异步世界生成器进行巧妙管理来实现的,该生成器支持多线程世界生成,但默认情况下不会自行启用。
这有助于更快地生成世界,因为生成步骤是相互独立处理的。

多世界生成:
区块预生成器不再在服务器线程上生成区块,它仅在服务器线程上管理要生成哪些区块以及在何处生成。
这允许多个维度同时生成,且不会影响彼此的世界生成速度——前提是服务器有足够的线程。

预生成期间可游玩:
区块预生成器被设计为在游戏运行期间也能正常工作。
世界生成是一项 CPU 密集型任务,但由于离线运行,它可以作为后台任务执行。
但这仅适用于系统有足够资源的情况,否则可能会影响游戏体验。

改进的区块生成检查:
区块预生成器拥有更优化的区块检查方式。
这种检查比普通检查快得多,但由于提供的信息有限,准确性略低。
此外,较慢的检查在非主线程执行,因此不会影响游戏,并且可以随时中断。

非常高效的内存管理:
区块预生成器并非盲目地生成区块。
它还会管理自己的内存使用情况,跟踪内存泄漏,并在必要时为 Minecraft 进行清理。
这并非完美,也无法解释其他模组的影响,但它能遏制已知的 Minecraft 内存泄漏问题,同时避免引发其他问题。
除此之外,预生成任务已优化到占用资源极少,以至于任何合理的生成操作都不会被注意到。

逆向生成(Retrogen):
区块预生成器现在是少数能在 1.14 或更新版本中实现逆向生成的模组之一。
这是通过重新创建世界生成步骤本身来实现的。
由于区块已经完全整合到世界中,这部分操作会在主线程上运行,因此会对服务器性能产生影响,但比正常生成要小得多。

集成性能分析器(1.12 或更旧版本):
区块预生成器拥有一个集成的基础 UI 性能分析器,允许查看世界中正在发生的事情的实时统计数据。
它还提供一些信息,例如方块更新、方块刻、活动的方块实体/实体以及哪些在刻、哪些没有。
这也仅在网络线程上完成,这意味着即使服务器本身卡顿,它也能获取信息而不会真正卡住。

维度控制(1.16 或更新版本):
区块预生成器提供了一种在游戏运行期间禁用或启用维度的方法。
这非常实用,因为维度不再能自行卸载,并且会占用少量资源。
这通常不是问题,但若要创建大量可能只使用几次就被忽略的维度,这可能会增加额外不必要的延迟。

维度特定种子(1.19 或更新版本):
区块预生成器允许你为每个维度设置种子。包括模组维度。
这可以在服务器配置文件夹的 "pregen_seeds.json" 中进行配置。

关于大规模世界生成(+400 区块半径)的警告:

本节适用于任何 Minecraft 版本。如果某些内容特定于某版本,会特别注明。
由于我多次被问到关于大规模世界生成的问题,并且我每次都重复相同的警告,我想干脆把它们写出来。
这些警告仅适用于原版,模组环境会严重放大这些问题,所以如果你阅读此内容,请务必思考模组实际上增加了多少内容。(结构模组就是一个特定的问题)

所以你想生成大于 250 区块 / 4000 方块半径的世界。假设是 1500 区块半径或更大。作为玩家或服务器所有者,你需要做几件事,以确保不会以损坏的世界或占用过多内存而无法游玩的世界告终。可悲的是,Minecraft 的每个游戏版本都存在一些内存泄漏。

首先需要知道的是:大规模世界生成需要时间。
如果你在原版中生成一个 1000 区块半径的世界,可以肯定这将花费 24-48 小时。如果你扩大到 2000 区块半径,那时间至少会翻四倍。但通常考虑到数据量的增加,会是 8 倍。因此,2000 区块半径很可能需要一周时间。根据整合包的不同,这个时间可能会是 10 倍、50 倍,或者只有 1.2 倍。
如果你达到最大半径(25k 区块半径),那将需要一年时间。而且不是在默认设置下。我的意思是,在你找到的最优化设置下,也需要满打满算的一年。而且这还是基于 I5-7500 CPU 计算的。
它虽然不是最好的 CPU,但相比服务器 CPU 已经相当快了。

接下来是:准备足够的存储空间。
我在 1.16.5 中有一个小世界(150 区块半径主世界和 100 区块下界),在一个非常轻量(世界生成)的模组世界中就已经占用了 700MB。预生成甚至没有注意到模组的存在。
所以如果你把这个翻倍,在 300 和 200 区块半径下你会已经达到 2.8GB。如果你选择 1000 区块半径,你可能仅世界文件就会用到三位数的 GB 空间。(模组环境会更糟)
确保你为此做好了准备。如果你进行大规模生成,且有足够大的规模,至少准备 1TB 的可用空间。这只是一个建议,如果你更了解情况,那么你知道该怎么做。

下一点是:不要从最终的世界开始。
如果你要进行大规模生成,不要从你最终想玩的世界开始。先从一个较小的测试世界(使用相同种子)开始,看看效果如何。比如进行 300 半径的生成,看看会出现什么问题,因为如果在生成过程中 75% 处出现问题并损坏了世界,你损失的时间比做 24 小时的生成测试要多得多。而且好消息是,区块预生成器也支持扩展。因此,在一步步生成的过程中,你可以发现问题并加以修复。这是一个较慢的过程,但你需要了解你的游戏需要什么来保持稳定。
你可以选择冒险路线,直接开始并希望一切顺利,但通常在这种规模下不会顺利。300 区块半径以内是安全的,即使会出现一些内存使用影响,它们也会足够小,不会在 4-5GB 内存设置下引起麻烦。

下一点是:注意结构文件,特别是废弃矿井(仅限 1.12)
在 1.12 或更旧版本中,结构是全局存储的。这意味着它们总是被加载。通常这不成问题,如果你没有很多(比如少于 100 个)。问题在于废弃矿井到处都是,而且数量极多。
为什么这是问题呢,尽管“矿井文件只有 500kb 大”(例如),你看。Minecraft 不仅全局存储它们,而且是全局存储两份。是的,两份。一份是游戏可用的形式,第二份是未压缩的 NBT 形式,以加快写入速度。这是一个问题,因为实际文件被极度压缩。所以那个 500 KB 的文件可能已经占用了 1.5-3GB 的内存。压缩比就是这么高。“data”文件夹中的所有文件都被这样压缩。所以如果你发现异常大的文件,那可能是高内存使用的原因。因为它们被全局存储在内存中。(但模组通常只存储一份,而不是结构的两份)
那么修复方法是什么? 对于原版结构,你可以直接删除文件,只要确保服务器当时没有运行即可。唯一不再有效的功能是“locate”命令,因为它实际上使用了这些文件。你只需要删除过大的文件。比如任何低于三位数 KB 范围的文件都可以保留。如果你担心可能会破坏某些东西,只需先将它们重命名测试一下。
但对于原版结构,请务必注意井下矿井文件。哦,对于添加结构的模组来说,根据实现方式,这个问题也可能存在。Reconcurrent complex 实际上将所有结构存储在单个文件中,那通常会很快变得很大。

最后一点:你需要维护你的预生成进程。
是的,你不能只是开始然后等待其完成,你需要跟踪它。比如在你醒着的时候随时保持聊天消息可见。
因为如果出现问题,你需要知道。在 1.12 中,区块预生成器有故障开关,会在必要时终止游戏以确保存档安全。在 +1.14 中,那里几乎没有这些了,因为 1.12 中存在的问题已经高度分散,不再能影响主游戏。
但一般来说,如果你不跟踪你的预生成进程,并且由于你没有检查某些事情而导致任何损坏,那很可能需要从头开始。

这个列表是我警告过的最常见的大规模生成问题。(+300 区块半径(10k 世界直径))
我希望这能帮助你做好准备,并把所有事情都考虑周全。

精彩展示视频:

如果你想提交一个精彩展示视频,它将被放在这里:

 

Bears Den 的精彩展示(版本 3.0.3):

Bears Den 的预览精彩展示(版本 3.0.3):

Bears Den 的精彩展示(版本 2.0):

Goshen 的精彩展示(版本 1.9.0)

 

使用 Amidst 和 JourneyMap 的提示与技巧(版本 1.9.2)

 
进度聊天刷屏:
图片
这就是聊天中进度条的样子。(我知道,很花哨)
[任务名称] 显示当前活动任务。
[世界] 显示任务运行所在的世界。
[任务类型] 显示生成类型。
[任务进度] 显示任务进度。“主”是主要的生成步骤,“亮”是区块的最终化,以便可以使用。“总计”是要生成的总区块数。
[速度] 显示每个生成器每刻的运行速度。(每秒 20 刻)
[已加载]:显示已加载的区块、区域文件(保存文件)和兴趣点(村民相关)。这仅用于纯粹的调试原因,如果这些数字中的任何一个变得过高,你就知道有问题了。(已加载区块:绝不应超过初始数量的 15-20k,区域文件绝不应超过 150,兴趣点应始终回落到 50k,但不是瞬间完成)
[剩余时间] 显示任务预计完成前的时间。(需要 5-10 分钟才能准确)
[内存使用] 显示服务器的内存使用情况。