
【マイクラ】製鉄所についての考察
今回の記事はYoutubeに投稿した製鉄所の開発にまつわる小話です。
JAVA版マイクラの1.20で主流のゴーレムトラップは以下のタイプです。
うわさ話式(村人の噂話アクションを利用したタイプ)
村人が1層あたり5人必要なる。
ピースフルでも稼働させられるが、夜間に稼働しない。
各層を16ブロック以上離さなければならない。
1層あたりの効率は200インゴット前後
パニック式(村人がモンスターでパニックを起こすのを利用したタイプ)
村人が1層あたり3人必要になる。
ピースフルでは稼働しないが、夜間も稼働する。
各層を10ブロック以上離さなければならない。
1層あたりの効率は200インゴット前後
ネザー式(パニック式の処理層をネザーに移したタイプ)
パニック式とほぼ同様の特性
1層あたりの効率は400インゴット
今回は「ネザーが玄武岩デルタなので使いづらい」「村人を節約したい」などの理由でパニック式を採用しました。なお動画中でネザー式と効率面で遜色ないと述べているが、ユニット単位では普通に負けるのである。あくまでもYoutube上で日本語で紹介されるている製鉄所の中では、効率が良い類に属するというだけである。
では、まず最初にパニック式に関するゲームの仕様について見てみよう。
1.村人が直近20分以内に、ベッドで寝たことがある。
2.村人が直近30秒以内に、アイアンゴーレムを検知していない。
2.1.村人からX、Y、Z各軸方向に±16ブロックの立方体内のアイアンゴーレムが検知対象となる。
2.2.村人は10秒に1回、範囲内にアイアンゴーレムがいるか調べる。
3.村人が直近30秒以内に、召喚現場の近くにいたことがない。
3.1.召喚現場の近くにいるとは、村人が、アイアンゴーレムの召喚に成功した村人からX、Y、Z各軸方向に±10ブロックの立方体内にいたことを指す。
中略
村人がアイアンゴーレムの召喚を試みる場合、村人を中心とした16x13x16の直方体内に最大10回スポーンを試みる。
よくあるパニック式のモンスターの待機場所は以下のような構造をしている。このような構造は村人が睡眠する周期が不安定になりやすく、仕様の1番目に抵触する懸念がある。そのため今回はホッパータイマーとトラップドアを使って正確にパニックの発生をコントロールすることにした。


マイクラにおいてトラップの効率を求めるなら「スポーン抽選発生確率を上げる」「スポーン抽選当選確率を上げる」「処理速度を上げる」という3要素を考える必要がある。今回もこの鉄則には従う。
まず「処理速度を上げる」ことを考える。
この項目はネザー式が最強である。湧いた瞬間に転送することで処理時間は実質1秒程度になるからだ。実際、アイアンゴーレムに限らず効率を追求するトラップではネザー式が主流だ。
しかし今回はオーバーワールドでの処理を考える。よって重要になるのが仕様2.1で、村人から16ブロック離してしまえば実質的に処理は完了だ。また仕様2.2に従い、この処理は10秒以内に完了するように設計する。今回は落下式を採用したことで、湧き層上での移動(7m程度)に8秒弱は確保した。
次に「スポーン抽選当選確率を上げる」ことを考える。
これは仕様での指定範囲内に不透過ブロックがあれば良い。ただし面積が広ければスポーンに成功する確率が上がるが、湧き層上の移動距離が増えるため効率はそこまで改善しない。今回は水源一つで水流輸送できる面積である5×5とした。
最後に一番難しい「スポーン抽選発生確率を上げる」ことを考える。
これには「ユニットの配置」と、「パニックの発生周期」の設定が重要であることが開発の過程で明らかになった。
「ユニットの配置」自体はユニット化された湧き層があればそんなに難しくない。注意点は「パニック開始のタイミングは同期させること」と、「各ユニットは10ブロック以上離すこと」のみである。
なお、パニック式で用いるモンスターはゾンビが一般的だが、ピリジャーの方が被探知距離が長いので、機構をシンプルにできるのでお勧めだ。

一方の「パニックの発生周期」はかなり複雑な仕様が関与する。結論としては、「20秒の休み→20秒のパニック」というサイクルが最適である。
これは先に述べた以下のwiki記載の仕様に不正確な点があるためである。2. 村人が直近30秒以内に、アイアンゴーレムを検知していない。正しくは
村人は前回のアイアンゴーレム検知から起算して10秒ごとに走査して、3回連続でゴーレムを検知しない。
であり、wikiの記述では30秒周期で抽選を行えるように見えるが、実際には40秒周期でないと長時間稼働時に効率が半分程度に落ち込む。
まず40秒周期の場合のトラップの稼働状況は以下のように図示できる。

この図は縦軸がそれぞれのユニット、横軸が時間の流れを示す。
線が赤い部分はパニックが発生している時間、
黒い部分が休んでいる時間、
青い部分がパニックが起きてもスポーン抽選に入れない時間である。
またオレンジの部分は赤線の内、抽選に入れる時間の最初の10秒以内を示している。これは原因は不明だがパニックが発生してからスポーンが起こるまでの時間は10秒以内だからである。
そしてこの図はパニック発生すると10秒以内にゴーレムがスポーンし、10秒×3回のスキャンが各層で行われている様子を表している。スキャンのカウント開始タイミングは各層で異なり、クールタイムの終了が次のパニック発生の直前になってしまう場合があることが示されている。
もし効率の向上を狙って30秒周期にすると以下のようになる。

この図では④の層は最初のスポーンが遅くなったため、クールタイムの終了が次のパニック発生に間に合っていない。そのため他の層でゴーレムが湧いて3回目の走査でゴーレムを検知したため、10秒×3回を数えなおすことになっている(!!マークはゴーレム検知の印)。
①層と③層でも同様のことが起こっているため、この現象はゴーレムのスポーンタイミングのズレが積み重なってくる長時間稼働時に多発し、スポーン抽選の機会を大きく損なう。
私の検証では1.5時間の稼働で鉄インゴットが2239vs1154という大差で40秒周期の性能が良いことが示された。
以上で製鉄所建設に伴う考察は終了である。
wikiの他に以下の動画を参考にした。
この動画は英語だが、かなり詳細に検証し、効率化を図っている。
また、この動画も中々わかりやすい。またパニック式のピースフルに出来ないという弱点を独自機構で克服している点も面白い。(僕のメインワールドは難易度固定)ただし、30秒ごとに湧かせるのが得策ではないのは先に示した通りである。