种子(Seed)是一个由一个或多个字符(包括正整数和负整数)组成的一个值,游戏根据这个值创建每一个Minecraft世界。[1]
注意
种子在不同平台上不兼容,并且同一平台上的不同版本之间可能不兼容。
世界生成
当游戏准备生成一个世界时,游戏会调用一个算法,生成一个伪随机数,这个数决定了世界的样子。但由于伪随机算法的性质,若算法初始输入的数值(种子)是相同的话,算出的最终结果是相同的。这就是种子的意义:使用相同的种子可以生成出多个相同的世界。
当世界生成算法更新(通常是加入新的生物群系)后,相同的种子就不会生成相同的地形。这也是某些不同的游戏版本中,相同的种子无法产生相同的地形的原因。
一个世界生成后,其种子便已经确定。默认情况下游戏会自动选择种子(使用系统时间)。但玩家也可以手动设置。使用相同的种子可以重复玩相同的世界,种子也可以用于与其他玩家分享世界。种子的设置可以用数字(包括负数)、字符等,非纯数字种子会被自动转换成纯数字。
如果将旧版本的世界导入到新版本中,则新生成的区块会基于新的种子,因此并不一定会与旧区块吻合(这个现象在Java版Beta 1.8和1.7.2中非常常见)。被删除的区块会重新生成,但只要种子或生成算法其中一个有所不同,区块就会不同。
必须注意的是种子其实只是输入到伪随机算法中的值,而不是世界真正的名字。根据某个种子生成的世界的特征并不注定与种子的字面含义有关。例如,即使是使用一个生物群系的名称作为种子,生成的世界也并不会以此作为主要的生物群系。
有问题的世界生成
你可以帮助我们扩充关于该主题的更多信息。
原因:3
有问题的世界生成是指区块不能正确加载并导致某些区块无法渲染,不过可能会在一段时间后、亦或使用F3+A来重载区块而好起来。
某些种子可能由于Java的Math.random()
函数会返回0,导致世界地形会在x或z轴上重复生成。(见下文)
查看种子
想要确定一个世界的种子,在Java版中,玩家需要执行命令/seed
。
在基岩版中,种子可于世界选项界面中查看。也有一个种子选择器,为玩家提供预设的种子,以在出生点附近生成具有特定特征的地形。此外,beta版中,屏幕顶端会显示这个世界特定的种子。
技术细节
Java版
Java中的String.hashCode()
函数用于将包含非数字字符的种子转换成纯数字。此函数输出的数据类型限制了游戏在使用非纯数字种子生成世界的总数量(232,即4,294,967,296)。由Minecraft随机生成的多人联机世界的种子调用了nextLong()
函数,可能只有248种。
基岩版
基岩版中的种子,无论是使用数字还是字符串,都有总共232(4,294,967,296)种可能的世界。这个结论对于64位版本的Windows 10版同样成立。这是由于基岩版使用了32位的梅森旋转算法,只接受32位的种子。
原主机版
原主机版主要遵循Java版种子的世界生成。
历史
Java版pre-Classic | |||||
---|---|---|---|---|---|
rd-160052 | 添加了一个简单的世界生成器。 | ||||
Java版Classic | |||||
0.0.12a | 世界生成器更新。 | ||||
2009年8月25日 | 展示了再次进行更新的世界生成器。 | ||||
生成更多的悬崖。 | |||||
Java版Indev | |||||
0.31 | 20091223-2 | 公布了等轴距级渲染的屏幕截图。 | |||
20100106 | 现在可以在生成世界时选择岛屿、浮岛、平坦或原始作为世界类型。 | ||||
可以选择正方形、长形或下深作为世界形状。 | |||||
可以选择小、正常或大作为世界大小。 | |||||
20100107 | 下深浮岛地图现在有多层岛屿。 | ||||
现在可以选择世界主题,有正常和地狱。 | |||||
20100111-1 | 现在岛屿生成更多的沙子。 | ||||
20100113 | 海洋现在生成无限的水。 | ||||
20100122 | 水现在可以自然生成于海平面上和浮岛上。 | ||||
减少洞穴被水淹没的可能性。 | |||||
Java版Beta | |||||
1.3 | 允许玩家自定义地图种子。 | ||||
1.8.1 | 调试屏幕开始显示当前世界的种子。 | ||||
Java版 | |||||
1.2.1 | 服务器将不再向客户端发送种子。 | ||||
1.3.1 | 12w18a | 由于单人游戏的实现方式与多人联机合并,世界的种子不再显示在调试屏幕上。 | |||
12w21a | 添加/seed 命令,用于显示当前世界的种子。 | ||||
1.7.2 | 世界生成算法发生改变,这意味着使用一个旧版本存档,原先未加载的区块将生成不同地形。 |
你知道吗
- 某些种子会在游戏内部中返回0,[2]引起洞穴和其他结构的无限生成。[3]
- 107038380838084种子会在第一次被调用时返回0,而164311266871034会在第二次被调用时返回0,导致一些结构分别在X和Z轴上循环生成。
- 诸如Cubic Chunks mod 的Mod将采用前三个调用而不是前两个调用来生成地形。这导致164311266871034在Y轴上无限地生成洞穴,240144965573432在Z轴上无限地生成洞穴。[4]
- 这个特性是Java独有的,因为基岩版没有在第一次或第二次调用时返回0的种子(但是,257678572会在第6次调用时返回0)。[5]
- 这个特性在原主机版也可以看到。
- 107038380838084种子会在第一次被调用时返回0,而164311266871034会在第二次被调用时返回0,导致一些结构分别在X和Z轴上循环生成。
- 只有种子的某些部分会被用于生成的世界上的特定特征。通过将种子转换为二进制并调整所需位,就可以生成具有重复洞穴系统和结构的多个不同世界。[6]
- 例如种子发生器只使用种子的前48位来生成洞穴和恶地。
- 装饰结构也能通过这个方式控制生成。[7]
- 在创建世界时输入种子0将自动生成随机种子。种子0仍然可以以“creashaks organzine”作为种子进入。[8]
- 这是由于开发者决定的,因为许多游戏当提供种子选项时,都会使用0作为“随机”,“无限”或“不在乎”的标志。
- 在基岩版中,输入1位数的种子(从-9到9)也将生成随机种子。解决方法是输入“ddnqavb”,然后输入“a”到“s”中的任何其他字母。例如,“ddnqavba”将生成种子“-9”。
- 在Java版中,可以输入
North Carolina
来生成演示世界种子。
画廊
外部链接
- Random Seed Reader:Java本地工具(英文)
- AMIDST Project:种子/世界浏览器(英文)
- Chunkbase Minecraft Apps:另一个种子/世界浏览器(英文)
- MineAtlas:种子/世界浏览器/查找器(英文)
- Minecraft Seeds: 由社区人员驱动的MC种子库(英文)
- Minecraft Seed HQ: MC种子库(英文)
参考
- ↑ http://mojang.com/2011/02/23/a-short-demystification-of-the-map-seed/
- ↑ http://stackoverflow.com/questions/3065554/can-javas-random-function-be-zero
- ↑ MC-111378
- ↑ https://www.youtube.com/watch?v=LPSqmKwkKOY
- ↑ https://www.reddit.com/r/MCPE/comments/5i6sae/recursive_infinite_mineshaft_seeds_on_mcpe/
- ↑ https://www.minecraftforum.net/forums/minecraft-java-edition/seeds/2229720-can-two-different-seeds-produce-identical-worlds
- ↑ https://www.youtube.com/watch?v=UtNXUMrSIxQ
- ↑ 44944 — ""0" is not handled as a valid seed" resolved as "Works as Intended".
版本 | |||||||
---|---|---|---|---|---|---|---|
开发周期 |
| ||||||
技术 |
| ||||||
多人游戏 | |||||||
游戏订制 |