IndustrialCraft2でEUを扱う時のまとめ(MC1.4.7)

GeneralSolar(https://github.com/r3qu13m/GeneralSolar)を書いた時に感じたことのまとめ。Minecraft 1.4.7、IndustrialCraft2 1.115.231-lf、 Minecraft Forge #534。

IC2のEnergy Networkを利用するには、次の手順を踏む必要がある

  • TileEntity#validate内でIC2 APIのEnergyTileLoadEventをForge Event Busへ投げる(これでネットワークへ参加したことになる)
  • TileEntity#updateEntityで(ネットワークに参加しているなら)各種発電・EU受け取りの処理をする
  • ブロック削除時にはTileEntity#invalidateでIC2 APIのEnergyTileUnloadEventをForge Event Busへ投げる

ネットワーク内部のEUのやりとりは全てForge Event Busによるもので、次のイベントを利用する。

  • EnergyTileLoadEvent
  • EnergyTileSourceEvent
  • EnergyTileUnloadEvent

上から、ネットワークへの参加、EUの発生、ネットワークからの脱退を表している。

これらのイベントはIC2側でハンドリングされ、ネットワークに参加しているTileEntityに通知される。ここでのTileEntityは、全て次のいずれかのインターフェースを実装している必要がある。

  • IEnergySource
  • IEnergyAcceptor
  • IEnergyConductor
  • IEnergyEmitter
  • IEnergySink
  • IEnergyTile

インターフェースの関係としては次のようになる。

IEnergyTile -+-> IEnergyEmitter  --+-> IEnergySource
             |                     |
             |                     +-> IEnergyConductor
             |                     |
             +-> IEnergyAccepter --+-> IEnergySink

なので、実際に実装すべきインターフェースはIEnergySource, IEnergyConductor, IEnergySinkのみと言える。それぞれ発電機、ケーブル、機械が実装するインターフェースで、Forge Event Busを意識するのはIEnergyEmitterを実装しているIEnergySource/IEnergyConductorのみで良い。