okayurisotto.net

私が好きでやったことが他の人のためにもなったらお得かも!

Minecraftにおける作物の成長に関する概念、「有効水分量」について

  1. 📝

はじめに

この記事では、Minecraft Java Editionにおける効率的な作物の植え方について解説します。よく「異なる作物は交互に、縞模様になるように植えるとよい」と紹介されますが、その具体的な仕様について解説されている場面はさほど見かけません。この記事では作物の成長に関してどういった処理が行われているのか具体的かつわかりやすく解説します。

概説

Minecraftの世界では時間の経過はティックという単位で管理されており、20ティックは1秒に相当します。各ティックではランダムにブロックを選び出す処理が行われており、選ばれたブロックではランダムティックという特殊な処理が行われます。

作物とは耕地ブロックの上に置かれた一種のブロックです。作物は0から7までの年齢を属性として持ち、年齢が最大の7まで到達すると収穫可能になります。そしてこの年齢は、ランダムティック処理によって1ずつ上がっていきます。

しかし作物の場合、ランダムティックで選ばれたからといって確実に年齢を上げるわけではありません。その作物ブロックの座標の明るさレベルが8以下だった場合は年齢を上げませんし、十分に明るかったとしても一定の確率でしか年齢を上げません。その確率を決める上で登場する概念が有効水分量です。

有効水分量とは

有効水分量は、作物が植えられたブロックとその周囲のブロックの状態、そして周囲に同種の作物があるかどうかによって算出されます。多ければ多いほど、ランダムティック処理で作物が成長する確率は高まります。

ここで「作物が植えられたブロック」とは「作物ブロックの1つ下にあるブロック」のことで、「その周囲のブロック」とは「そのブロックを中心とする一辺3ブロックの正方形の範囲にある、そのブロックを除くブロック」のことです。

↓上から見た様子

-----
-XXX-
-XOX-
-XXX-
-----

O: 作物が植えられたブロック
X: その周囲のブロック
-: 関係ないブロック

作物が植えられたブロックとその周囲のブロックの状態によって総水分量が算出され、それが周囲の同種の作物の有無によって減らされます。

総水分量の算出

あるブロックの水分量は、次のような処理によって算出されます。

  1. もしそのブロックが湿った耕地だった場合:3
  2. でなくとも、もしそのブロックが耕地ではあった場合:1
  3. でなければ:0

総水分量の算出では、作物が植えられたブロックとその周囲のブロックにおいて、それぞれ上記の処理が行われ、結果は重み付けされた上で合計されます。

重み付けは、

  1. もしそのブロックが作物が植えられたブロックなら:等倍
  2. でなければ:0.25倍

となります。

よって総水分量は、最大で3 * 1 * 1 + 3 * 0.25 * 8で9となり、最低で1 * 1 * 1 + 0 * 0.25 * 8で1となります。

総水分量が有効水分量とならない場面

基本的には総水分量がそのまま有効水分量となりますが、作物の周囲に同種の作物が植えられていた場合には、総水分量が半減されたものが有効水分量となります。ただし、同種の作物が植えられていたとしても、南北もしくは東西に隣接しているだけであれば半減はされません。

つまり、

  • 南北に隣接する形で同種の作物があり、なおかつ東西にも隣接する:半減
  • 北東、北西、南東、南西のいずれかに同種の作物がある:半減
  • それ以外:等倍

となります。

よって有効水分量は、最大で9 * 1で9となり、最低で1 / 2で0.5となります。

最終的な確率

ランダムティック処理が行われるとき作物が成長する確率は、1 / (floor(25 / 有効水分量) + 1)です。ここでfloor()とは小数点以下を切り捨てる処理です。

つまり最終的な確率は、最大で1 / (floor(25 / 9) + 1)1 / 3となり、最低で1 / floor(25 / 0.5)1 / 51です。

試算

ではここで、作物を交互に植えたときどの程度確率が上がるのか試算してみます。

交互に植えなかった場合、有効水分量は総水分量の半分となります。これは最大で4.5です。よって確率は1 / 6となります。交互に植えた場合、有効水分量は総水分量の等倍です。これは最大で9です。よって確率は1 / 3となります。

よって、交互に植えることで総水分量が半減されないようにすると、倍の確率で成長していくことがわかります。

ちなみにランダムティック処理は平均で68.27秒に1回行われます。よって、最高効率の畑に作物を植えてから収穫可能になるまでには平均で21 * 68.27秒、つまりおよそ24分が必要です。

おわりに

最後にこの記事の内容を簡単にまとめると、

  • 作物を植えるブロックとその周囲のブロックは湿った耕地にするとよい
  • 作物は南北もしくは東西のみの隣接までしかしないようにするとよい

となります。

出典

この記事の内容はMinecraftのソースコードを出典としています。FabricでのMOD開発環境の構築で(必然的に)Minecraftのソースコードが読めるようにデコンパイルされますので、出典の確認の際にはそのようにしてください。