Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package darkevilmac.functionality.tileentity
- import cofh.api.energy.IEnergyStorage
- import cpw.mods.fml.common.FMLCommonHandler
- import darkevilmac.functionality.energy.MultiBattery
- import darkevilmac.functionality.util.IC2EnergyUtils
- import ic2.api.energy.EnergyNet
- import ic2.api.energy.event.{EnergyTileLoadEvent, EnergyTileUnloadEvent}
- import ic2.api.energy.tile.IEnergySource
- import ic2.api.info.Info
- import net.minecraft.nbt.NBTTagCompound
- import net.minecraft.tileentity.TileEntity
- import net.minecraftforge.common.MinecraftForge
- import net.minecraftforge.common.util.ForgeDirection
- /**
- * A class you can add to your tileentity to emit energy from IC2, Buildcraft, and mods that support Redstone Flux
- *
- * @param dir the direction the tile can outputs from
- * @param parent the the tile this is in
- */
- class TileMultiPowerEmitter(var battery: MultiBattery, var dir: ForgeDirection, parent: TileEntity) extends TileEntity with IEnergySource with IEnergyStorage {
- var tileBuffer: Array[TileBuffer] = null
- var addedToEnet: Boolean = false
- override def updateEntity() {
- if (!addedToEnet) onLoaded
- if (worldObj != null) {
- if (tileBuffer == null) {
- tileBuffer = TileBuffer.makeBuffer(worldObj, xCoord, yCoord, zCoord, false)
- }
- }
- }
- def onLoaded() {
- if (!addedToEnet && !FMLCommonHandler.instance.getEffectiveSide.isClient && Info.isIc2Available) {
- worldObj = parent.getWorldObj
- xCoord = parent.xCoord
- yCoord = parent.yCoord
- zCoord = parent.zCoord
- MinecraftForge.EVENT_BUS.post(new EnergyTileLoadEvent(this))
- addedToEnet = true
- }
- }
- override def validate() {
- tileBuffer = null
- }
- override def invalidate() {
- super.invalidate
- onChunkUnload
- }
- override def onChunkUnload(): Unit = {
- if (addedToEnet && Info.isIc2Available) {
- MinecraftForge.EVENT_BUS.post(new EnergyTileUnloadEvent(this))
- addedToEnet = false
- }
- }
- override def readFromNBT(nbt: NBTTagCompound) {
- }
- override def writeToNBT(nbt: NBTTagCompound) {
- }
- def getTile(side: ForgeDirection): TileEntity = {
- if (tileBuffer == null) {
- tileBuffer = TileBuffer.makeBuffer(worldObj, xCoord, yCoord, zCoord, false)
- }
- tileBuffer(side.ordinal).getTile
- }
- /**
- * Redstone Flux's energy reception
- *
- * @param maxReceive
- * Maximum amount of energy to receive.
- * @param simulate
- * If TRUE, the charge will only be simulated.
- **/
- override def receiveEnergy(maxReceive: Int, simulate: Boolean): Int = {
- 0
- }
- /**
- * Redstone Flux's energy extraction
- *
- * @param maxExtract
- * Maximum amount of energy to extract.
- * @param simulate
- * If TRUE, the extraction will only be simulated.
- **/
- override def extractEnergy(maxExtract: Int, simulate: Boolean): Int = {
- if (battery.getRF() > maxExtract) {
- battery.useRF(maxExtract, false)
- } else {
- battery.useRF(battery.getRF(), false)
- }
- 0
- }
- /**
- * Redstone Flux's current energy storage
- *
- * @return
- */
- override def getEnergyStored(): Int = {
- battery.getRF()
- }
- /**
- * Redstone Flux's max energy
- *
- * @return
- */
- override def getMaxEnergyStored(): Int = {
- battery.getRF
- }
- def canConnectEnergy(from: ForgeDirection): Boolean = {
- if (dir == null) {
- false
- }
- if (dir == ForgeDirection.UNKNOWN || dir == from) {
- true
- }
- false
- }
- override def emitsEnergyTo(receiver: TileEntity, direction: ForgeDirection): Boolean = {
- true
- }
- override def getOfferedEnergy: Double = {
- Math.min(battery.getEU, EnergyNet.instance.getPowerFromTier(IC2EnergyUtils.getIC2TierFromEnergyRate(battery.transferRate)))
- }
- override def drawEnergy(amount: Double) {
- battery.useEU(amount, false)
- }
- override def getSourceTier: Int = {
- IC2EnergyUtils.getIC2TierFromEnergyRate(battery.transferRate)
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement