CropTick

親記事 Tick

準拠: industrialcraft-2-2.2.517-experimental

概要

Minecraftの世界では1秒間に20回ワールドの更新が入る。これは一般的にtickと呼ばれ、IndustrialCraft2を含む多くのMODで時間の単位として受け入れられている。

ところで、IC2Cropの世界では1秒間に20回の更新が入ることはない(TileEntityCrop#updateEntity)。正確には、1秒間に20回のtickが訪れるが、タイルエンティティがフィルタリングして256tick(TileEntityCrop#tickRate)ごとに1回の更新を行うようにしている

ここで、更新の際に呼ばれるメソッド名にはtickという名前が付けられている(TileEntityCrop#tick)が、この名前をそのまま呼称として使うとMinecraft本来のtickの周期(1/20秒)なのか、TileEntityCropクラスのメソッドであるtickが呼ばれる周期(12.8秒)なのかが紛らわしい。

よって、本記事群では便宜上このMinecraft本来のtickMinecraftTickTileEntityCropクラスのメソッドであるtickの呼び出しCropTickと呼ぶ

ticker

TileEntityCropが持つchar型の変数であり、保存されない

チャンクロード時に0~255の範囲の整数乱数値で初期化され、1 MinecraftTick毎に1つずつインクリメントされる。

ちなみに、Javaのchar型は2バイト(-32768~32767)である。

MinecraftTick毎に行われる処理(TileEntityCrop#updateEntity)

次のことを行っている。

  •  スーパークラスの同メソッドの呼び出し(TileEntity#updateEntity()は空のメソッドであり、何もしない)。
  • tickerをインクリメントし、256の倍数であった場合にCropTickを呼び出す
  • このタイルエンティティが未更新・非同期状態(dirty)であった場合、次のような更新を行う
    • 描画の更新の必要を登録する(World#markBlockForUpdate)
    • 光量の更新の必要を登録する(World#updateLightByType)
    • サーバーサイドである場合、
      • 周囲のクライアントへのNBTデータの同期(IC2.network.updateTileEntityField)

CropTick毎に行われる処理(TileEntityCrop#tick)

次のことを行っている。

※ 作物種のtickで支柱が空や交配用支柱になった場合、ここで必ず例外が発生しサーバーダウンする

環境値の更新周期は、次のようになっている。

ticker 更新される環境値
1024 * n + 256 *0 保水
1024 * n + 256 *1 肥沃
1024 * n + 256 *2 通気
1024 * n + 256 *3 ×

作物種のtick(CropCarf#tick)

タイルエンティティのほかに、作物種にも個別にCropTickイベントが設定可能である。デフォルトでは何も行っていないが、いくつかの作物種では特別な挙動が設定されている

  • ネザーワート・テラワートでは、一定の条件下において成長ブーストや必然変異が起こる。

そのほかにはIC2・GregTechともに存在しない。

トリビア

  • CropTickごとに常に環境値が再計算されるわけではない。
  • Cropは作物種にかかわらず、256tickに1回(12.8秒に1回)の間隔で成長などの処理を行う。
  • tickerはpublicなフィールドである。これは、CropCard#tick内で256の倍数-1に書き換えれば、次のMinecraftTickにも処理が行われることを意味する。その場合、環境値の更新周期について考慮しなければならない。
最終更新:2014年07月24日 22:01