マルチカルチャー

準拠: industrialcraft-2-2.2.517-experimental

概要

支柱ブロックのタイルエンティティであるTileEntityCropのクラスの中で、何のオーバーライドでもなく、getter/setterでもなく、更にどこからも全く参照されていないpublicメソッドが一つだけ存在する。それがマルチカルチャー(TileEntityCrop#updateMultiCulture)である。

マルチカルチャーは植えられている支柱に対して計算することができる整数値で、その値は周囲の支柱に植えられている作物種の多様性を表している。

 

処理内容

次の処理を行っている。

作物種を入れるための空の可変長配列を用意する。
支柱を中心として、(x, y, z) = (-1~0, 0, -1~0) の範囲にある座標に対して、
その座標に支柱(TileEntityCrop)が存在する場合、その支柱が持つ作物種を、

既に作物種が配列に存在する場合を除き、配列にその作物種を追加する(TileEntityCrop#addIfNotPresent)。
配列の要素数-1を返す。

この処理は2つのバグを抱えている。一つは判定範囲がXZ軸の非正の方角に伸びる方角依存の直方体領域であり、もう一つは判定領域内に植物の無い支柱が存在した場合に例外が発生するというものである。

意味するところとしては、支柱を中心とした4マス分のブロックに対して自分自身とは異なる作物種の多様性を数えるといったところであろう。

実例

以下の画像の右下のオーレリアの支柱のマルチカルチャーについて、左上・上中央・右上・左下・下中央・右下の順で解説する。

画像の右下がXZ座標の正の方向であり、判定領域は左上に1マスずつ伸びる。

  • 判定領域にある支柱はオーレリアが1つであるため、多様性は1である。マルチカルチャーは0となる。
  • 判定領域にある支柱はオーレリアが4つであるため、多様性は1である。マルチカルチャーは0となる。
  • 判定領域にある支柱はオーレリアが4つであるため、多様性は1である。マルチカルチャーは0となる。
  • 判定領域にある支柱はオーレリアが3つと小麦が1つであるため、多様性は2である。マルチカルチャーは1となる。
  • 判定領域にある支柱はオーレリアが1つと小麦が1つとヴェノミリアが1つと樹液アシが1つであるため、多様性は4である。マルチカルチャーは3となる。
  • 判定領域に植物の無い支柱があるため、ArrayIndexOutOfBoundsExceptionを吐いて落ちる。

トリビア

  • この値が取りうる範囲は、0から3となる。
最終更新:2014年07月26日 11:50
添付ファイル