シードの欄に「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×10⁹のワールドにしか届きません。数値のシード値は、64ビットの全範囲を使えます。これは約18.4×10¹⁸のワールドにあたります。
つまり、ほとんどのワールドはテキストでは決して手に入りません。いちばん幅広く選びたいなら、数値を使いましょう。
異なるテキストが同じ数値になることもあり、これを衝突と呼びます。たとえば、フレーズ 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版専用です。統合版のワールド設定で、数値のシード値を確認してください。
異なる2つのテキストが同じシード値になることはありますか?
はい。テキストのシード値は、取りうる値が約4.29×10⁹しかないので、多くのフレーズが同じ数値になります。