農薬散布機

準拠: industrialcraft-2-2.2.517-experimental

概要

農薬散布機(英:Crop-Matron)は、電力と農薬用具(肥料保水セルWeedEx)を消費することで周囲の支柱の農薬値を上昇させることができる、IC2の機械ブロックである。

 

ブロック(BlockMachine2)

ブロックはIC2の共有マシンブロックであり、メタデータは2である。

タイルエンティティ(TileEntityCropmatron)

全体的な特徴

  • 親クラス:ic2.core.block.TileEntityInventory
  • 電力を使用する
  • GUIを持つ
  • 最大エネルギーは1000。エネルギーの単位はEUである
  • 電力Tierは1(受け入れエネルギーは32EU/t)

インベントリは、肥料用のスロットが3つ(fertilizerSlot)、保水セル用のスロットが3つ(hydrationSlot)、WeedEx用のスロットが3つ(weedExSlot)存在する(TileEntityCropmatron#)。

プログラムレベルでの仕様

内部変数はenergy:double、ticker:int、maxEnergy:int=1000、scanX:int=-4、scanY:int=-1、scanZ:int=-4、addedToEnergyNet:boolean=false、スロット3種。いずれもpublic。

保存する固有のNBTは「energy」:double。

ロード・アンロード時にサーバーサイドならばMinecraftForge.EVENTにEnergyTileLoadEvent、EnergyTileUnloadEventをポストする。

散布処理(TileEntityCropmatron#updateEntity)

Tickごとに次の処理を行う。

各スロットを整理(InvSlot#organize)する。
エネルギーが31以上である場合、スキャンを行う。

スキャン(TileEntityCropmatron#scan)

まず、次のような走査位置の更新を行う。

scanX++
if (scanX > 4) {
  scanX = -4
  scanZ++
  if (scanZ > 4) {
    scanZ = -4
    scanY++
    if (scanY > 1) {
      scanY = -1
    }
  }
}

つまり、自身のブロックの座標からの相対位置で(-4, -1, -4)~(+4, +1, +4)の範囲を1スキャンごとに1マスずつ走査していくことになる。9*3*9は243であり、走査位置が一巡するまでに243tick(12.15秒)かかる。これは256tickごとに行われるCropTickとおおよそ近い。

次に、内部エネルギーを1減少させ、走査位置に支柱があれば次の処理を行う。

肥料スロットが空ではない場合、支柱に肥料の自動適用を行う。
  適用が行われた(真であった)場合、内部エネルギーを10減少させ、肥料スロットにあるアイテムを1減少させる。
保水セルスロットが空ではない場合、支柱に保水の自動適用を行う。
  適用が行われた(真であった)場合、内部エネルギーを10減少させる。
  このとき行われる適応処理のなかで、保水セルが保水農薬値上昇分のダメージを受ける

​WeedExスロットが空ではない場合、支柱に除草の自動適用を行う。
  適用が行われた(真であった)場合、内部エネルギーを10減少させ、WeedExスロットにあるアイテムに1ダメージ与える

入手方法

バニラIC2Expではクラフトによって入手することができる。

12346支柱+5ベーシックマシン外装+79回路+8チェスト→農薬散布機

GUI

左から、電力ゲージ、肥料・保水セル・WeedExのスロットである。

農薬散布機のGUI

トリビア

エネルギーと走査に関するトリビア

  • 走査位置に支柱がなくとも、毎Tickエネルギーを1消費する
  • 農薬が全て空になっていても、毎Tickエネルギーを1消費する
  • 農薬を複数回適用可能な状況であっても、1スキャンにつき各1つずつまでしか適応しない
  • 走査範囲である±4の正方形は、水による耕土の湿化の範囲と等しい。
  • 走査範囲に存在する支柱の数によらず、走査間隔は常に243tickで固定である
  • ブロックの位置から-1~+1の高さの範囲は、耕土と同じ高さから支柱の1マス上のブロックまでを意味する。
  • 2組の耕土と支柱をぴったり上下に重ねることで、1つの農薬散布機で2段の農地に散布することができる
  • 耕土の保湿や収穫などを考慮しない場合、1つの農薬散布機で最大161個の支柱に散布することができる。
  • 農薬散布は壁を貫通する
  • 内部エネルギーが31EU以上なければ動作しない。この値は毎tickの消費エネルギー・各農薬の散布に要するエネルギーの合計である。
  • 1tickに最大31EUを消費するため、許容限界量である32EU/tのエネルギーを送っている場合、エネルギーが枯渇しない

散布の効果に関するトリビア

  • 肥沃農薬値が0の支柱には、2回適用しこれが180まで上昇する。また、100未満になり次第1回適用し、190まで上昇させる。
  • 保水農薬値が0の支柱には、1回適用しこれが180まで上昇する。また、適用から少し経つと179になるが、その時にも適用を行い180まで上昇させる。
  • 保水農薬値は支柱内で1CropTick毎に少量消費される。そして、保水セルは少しでも保水値が減っていた場合、少し使用されてこれが適用されたことになる。しかし、適用量にかかわらず消費エネルギーは10固定であるため、保水セルの自動散布は大量に電力を消費してしまう
  • 保水セルのみを
  • 除草農薬値が0の支柱には、3回適用しこれが150まで上昇する。また、そこから少し除草値を消費すると更に1回適応し、199に近くなる。
  • 除草の自動適用は遺伝子劣化の確率が高い
  • チャンクのアンロード・ロードを行うと、WeedExを急速に消費する
  • 小麦の種・骨粉・水セル・水バケツも農薬値を上昇させることができるが、各農薬スロットには肥料・保水セル・WeedExしか入れることはできない

統計に関するトリビア

  • 農薬散布機の周囲に80個の支柱が存在するとき、1種類の農薬を1回ずつ使用するのにかかるエネルギーは80*10EUの800EUである。これは最大内部容量である1000EUの0.8倍となる。
  • 農薬値が全て0の1つの支柱に農薬散布機で農薬散布する場合、肥料を2回、保水セルを1回、WeedExを3回適用する。これだけで60EUを消費する。
  • CropTickの間隔よりも走査間隔の方が短いため、保水セルを1回適用した後は必ず保水セルを1ダメージ分だけ消費する。保水セルの容量は10000であるので、1つの保水セルを使い切るのに10万EUのエネルギーが必要となる
  • 前述の理由から、肥料の適用を行う農薬散布機は常に電力を供給し続けるよりも、90CropTick(19.2分)の周期で、486tick(24.3秒)だけ電力を与えるような運用の方が効率がよい。
  • 保水農薬値は176~200の間で8の保水環境値への補正となる。農薬散布機は180までしかこれを上昇させることができないため、保水環境値を最大限に保っておきたい場合は4CropTick(1024tick=51.2秒)の周期で243tick(12.15秒)だけ電力を与えることが望ましい。この場合、電力消費量は常時通電の1/4となる。
  • 保水農薬値は151~175の間で7の保水環境値への補正となる。保水環境値を7~8の間に保っておきたい場合は、29CropTick(7424tick=371.2秒)の周期で243tick(12.15秒)だけ電力を与えることが望ましい。この場合、電力消費量は常時通電の1/29となる。
  • 除草値の減少は農地の状況に依存するため、状況にあった運用方法を考えるのがよい。前述のバグがあるため、WeedExを与えなくとも雑草が侵食しないような農地を構築するのがよい。

消費電力の計算

走査範囲にn個の支柱が存在する場合の長期的な平均消費電力E[EU/t]

E = 1EU/t + 10EU*n*(1CropTick当たりの平均農薬適用個数ρ)/256tick

1CropTick当たりの平均農薬適用個数の計算

ρ = (肥料を散布する場合:1/90)
  + (保水セルを散布する場合:1
  
(WeedExを散布する場合:(1CropTick当たりの平均除草値減少量W)/50

1CropTick当たりの平均除草値減少量の計算

= 面倒臭い

80個の支柱に肥料と保水セルを散布する場合の長期的な平均消費電力E[EU/t]

ρ = 1/90 + 1 ≒ 1.011
E = 1EU/t + 10EU*80*ρ/256tick = (1 + 3.125*(91/90))EU/t ≒ 4.160EU/t

80個の支柱に肥料を散布する場合の長期的な平均消費電力E[EU/t]

ρ = 1/90 ≒ 0.011
E = 1EU/t + 10EU*80*ρ/256tick = (1 + 3.125*(1/90))EU/t ≒ 1.035EU/t

1個の支柱に肥料を散布する場合の長期的な平均消費電力E[EU/t]

ρ = 1/90 ≒ 0.011
E = 1EU/t + 10EU*1*ρ/256tick = (1 + 0.03906*(1/90))EU/t ≒ 1.000434EU/t
最終更新:2014年07月24日 20:47