ホーム » 技術 » 古代の残骸とチャンク境界

古代の残骸とチャンク境界

マインクラフトでワールドの開拓が進むと、ネザライト装備を揃えるという課題に取り組むことになる。ネザライトはネザーのy=15を中心に上下7ブロック付近に生成される古代の残骸(あるいはがれき)を集めて精錬することで手に入るのだが、溶岩だらけのネザーで地下を掘るのは結構面倒だ。というのも古代の残骸の生成率は1チャンクあたり平均1.7個と非常に少なく、オーバーワールドで鉱石を採掘するときに使うブランチマイニングのような手法では見つけきれないからだ。そこでTNTを使って発破するような方法が使われるのだが、それにしても何かしら効率的に掘り当てる方法が知りたい。

マインクラフトの噂話のひとつに「古代の残骸集めはチャンク境界に沿って掘ると効率的」というのがある。なんとなくもっともらしく聞こえるし、実際にチャンク境界で掘るとたくさん取れると主張する人もいる。しかし、プログラマ的立場で考えるとチャンク境界で生成率を上げるようなコードは面倒臭くて書いていられないような気がする。だが気がするだけで済ましてしまうのもアレなので、ちょっと検証してみようと思う。

チャンク境界の「付近」って?

まず最初に考えなければならないのは「チャンク境界に沿って掘る」とはどういうことか、だ。チャンク境界に沿って掘っていくとき、幅いくつのトンネルを掘るべきかという話である。古代の残骸を掘りに行く段階のプレイヤーは効率Vのダイアモンドピッケルぐらいは持っているはずなので、なんならネザーラックを横向きに掘りぬくことぐらい簡単にできるだろう。つまりチャンク境界から片側に5ブロック、なんなら両側を掘ってもよいぐらいだ。つまり幅11ブロックに渡る大きなトンネルが作れる。しかし、もしこれほどの大きなトンネルが掘れるとしたら、そもそもチャンク境界を掘っている意味があまりなくなる。というのも、チャンクの大きさは16ブロック四方であるのだから、仮にチャンク境界を縦横に幅10ブロックで掘ったとしたら

16 x 16 = 256
256 - (6 x 6) = 220
220 / 256 = 0.859...

と、実に86%近い領域を掘ることになるのだ。これほど掘った上で「残骸がたくさんとれる」というなら、それは当たり前という話だ。ではもう少し控えめに、たとえば幅6ブロックのトンネルを掘ったらどうか。

256 - (10 x 10) = 156
156 / 256 = 0.609...

となるので、およそ61%の領域が掘れる。61%の領域を掘って61%を超える数の残骸が捕捉できるなら、チャンク境界付近は効率がよいと言えるだろう。

数えてみる

ではネザーに生成される古代の残骸を数えてみよう。セーブデータを解析してカウントできればいいのだがそのような技術は持ち合わせていないので、コマンドを使って「露天掘り」して、数えてみることにする。結果がこちら。範囲は10×10チャンク、古代の残骸を分かりやすいようにシーランタンで置き換えてある。

パッと見た目ではy=15付近に多く生成されているのが分かる。天井付近にもちらほら見えるのが意外に感じるが、y=119までが生成範囲なので確率上はあってもおかしくない。

次に、チャンク境界からNブロック離れた残骸をジャック・オ・ランタンに置き換える。

N=5、幅10のトンネルを掘った場合に相当

これでシーランタンがチャンク境界に近い残骸、ジャック・オ・ランタンがチャンク中心に近い残骸ということになる。

N=3、幅6のトンネルを掘った場合に相当

で、それぞれのシーランタンとジャック・オ・ランタンの数を数えてみた。結果は次の通り。

境界付近(N=5) 中心付近
13234
79.5%20.5%
境界付近(N=3) 中心付近
9769
58.4%41.6%

さてN=5の場合、占める領域は86%に当たるのだが、そこで見つかる残骸は79.5%という結果になった。掘っていない領域、つまりチャンクの中心に残骸が偏っているという意味だ。N=3の場合、占める領域は61%に対して見つかる残骸は58.4%となった。これもわずかではあるがチャンクの中心の方が多いという結果になった。

念のため異なる場所の10×10チャンクで同じようにカウントしてみた。結果は以下の通り。

境界付近(N=5) 中心付近
11629
80.0%20.0%
境界付近(N=3)中心付近
8659
59.3%40.7%

1チャンクあたりの残骸の数は減っているが、分布についてはそれほど大きく違っていない。ちなみにこれはJE 1.18.2での検証結果だが、ついでにJE 1.19.0でも2つの10×10チャンクで確かめてみた。

境界付近(N=5) 中心付近
1688
95.4%4.6%
境界付近(N=3)中心付近
12254
69.3%30.7%
境界付近(N=5) 中心付近
12431
80.0%20.0%
境界付近(N=3)中心付近
8273
52.9%47.1%

それぞれのデータには偏りがあるが、これら400チャンク分のデータをまとめて集計するとこうなる。

古代の残骸の総数 642
チャンク境界から3ブロックにある数 387
チャンク境界から4~5ブロックにある数  153
チャンク中心の6×6ブロック内にある数 102

大雑把に図にまとめるとこうなる。

古代の残骸は均一に分散している

以上から、古代の残骸はx軸/z軸については均一に分散しているとみて間違いない。古代の残骸の発見確率は、掘った量に正比例するということだ。10×10チャンクごとの分布にばらつきがみられたように、ある場所ではチャンク境界に集中して見つかるということも確率的にはあり得る。しかし確率的にはその逆、つまりチャンク境界には全然なく、中心部に集中して生成されることもあり得るわけで、特にチャンク境界を集中的に掘り進む必要はないと言える。