在种子框里输入过“Glacier”这样的词吗?Minecraft 会先把这段文字转换成数字,再生成你的世界。这个文本转种子工具能立即告诉你那个数字。输入任意单词或短语,就能得到 Java 版实际使用的数字种子。然后你可以在地图上打开它、分享它,或者粘贴到只接受数字的其他工具里。
如何使用文本转种子工具
- 按你在游戏里输入的内容,原样输入你的文本种子。
- 在输入框下方读取数字种子。
- 复制这个数字,或者在地图上打开。
大小写很重要。“Glacier”和“glacier”是两个不同的种子。中间的空格也很重要,但在当前版本中,开头和结尾的空格会被去掉。
Java 如何把文字变成种子
Java 版首先检查你的输入是不是数字。如果是能放进 64 位的整数,游戏就原样使用它。开头带正负号都可以。
其他任何内容都是文本。对文本,游戏会运行 Java 的 String.hashCode()。这个方法逐个遍历字符,把当前的累计值乘以 31,再加上字符编码。结果会回绕成 32 位有符号整数。
| 文本 | 数字种子 |
|---|---|
| Glacier | 1772835215 |
| glacier | 108181935 |
| minecraft | 695073197 |
超出 64 位的数字会被当作文本处理,所以它们同样要经过 hashCode()。
为什么文本种子有局限
因为 hashCode() 返回的是 32 位数字,所以文本种子只能到达约 4.29 十亿个世界。数字种子则使用完整的 64 位范围,大约是 18.4 百亿亿个世界。
换句话说,大多数世界永远无法通过文本到达。如果你想要最广的选择,就用数字。
不同的文本也可能得到相同的数字,这叫做冲突。例如,短语 creashaks organzine 和 pollinating sandboxes 的哈希值都是 0。它们生成的世界与种子 0 相同。
技巧和用途
- 清晰地分享种子。数字可以避免大小写和拼写错误带来的困扰。
- 使用种子工具。很多地图和查找器工具都需要数字值。
- 给世界起名。输入你的名字或服务器名,看看会生成什么世界。
- 验证著名种子。转换后在地图上打开,看看它为什么出名。
常见错误与基岩版说明
一个常见的错误是改了大小写。“Minecraft”和“minecraft”得到的数字不同。另一个是加入了隐藏字符,比如复制粘贴带来的末尾制表符。
这个转换器只支持 Java 版。基岩版也接受文本种子。不过,我们没有验证基岩版如何转换文本,所以不显示基岩版的值。如果你玩基岩版,请改用世界设置中显示的数字种子。
自 1.18 起,同一个 64 位数字在 Java 版和基岩版中地形和生物群系一致。结构在两个版本类型之间仍然不同。
简单看一下算法
使用这个工具不需要懂数学。不过,一个小例子会有帮助。对于文本“ab”,游戏从 0 开始。接着取“a”的编码,也就是 97。然后把 97 乘以 31,再加上“b”的编码 98,结果是 3105。
更长的文本会对每个字符重复同样的步骤。总数增长得很快,所以会超出 32 位的范围。这时数值会回绕。这就是很多文本种子得到负数的原因。
由于步骤是固定的,同样的文本在每台电脑上总是得到同样的种子。
这也意味着你可以自己验证任何著名的文本种子。把它输进去,转换器会重复游戏执行的完全相同的步骤。
常见问题
“Glacier”的数字种子是多少?
在 Java 版中,文本 Glacier 会变成 1772835215。
文本种子区分大小写吗?
区分。每个字母都有自己的字符编码,所以改变大小写会改变数字。
为什么我的文本种子数字是负数?
String.hashCode() 返回 32 位有符号整数,所以大约一半的文本会得到负数。
数字也会经过 hashCode 吗?
不会。能放进 64 位的整数会被直接使用。只有文本和过大的数字才会被哈希。
这对基岩版有效吗?
这个工具只支持 Java 版。请在基岩版世界设置中查看数字种子。
两个不同的文本会得到相同的种子吗?
会。文本种子只有约 4.29 十亿个可能的值,所以很多短语会共用同一个数字。