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のみで良い。