Advertisement
Guest User

Untitled

a guest
Sep 5th, 2014
176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 3.95 KB | None | 0 0
  1. package darkevilmac.functionality.tileentity
  2.  
  3. import cofh.api.energy.IEnergyStorage
  4. import cpw.mods.fml.common.FMLCommonHandler
  5. import darkevilmac.functionality.energy.MultiBattery
  6. import darkevilmac.functionality.util.IC2EnergyUtils
  7. import ic2.api.energy.EnergyNet
  8. import ic2.api.energy.event.{EnergyTileLoadEvent, EnergyTileUnloadEvent}
  9. import ic2.api.energy.tile.IEnergySource
  10. import ic2.api.info.Info
  11. import net.minecraft.nbt.NBTTagCompound
  12. import net.minecraft.tileentity.TileEntity
  13. import net.minecraftforge.common.MinecraftForge
  14. import net.minecraftforge.common.util.ForgeDirection
  15.  
  16. /**
  17.  * A class you can add to your tileentity to emit energy from IC2, Buildcraft, and mods that support Redstone Flux
  18.  *
  19.  * @param dir the direction the tile can outputs from
  20.  * @param parent the the tile this is in
  21.  */
  22. class TileMultiPowerEmitter(var battery: MultiBattery, var dir: ForgeDirection, parent: TileEntity) extends TileEntity with IEnergySource with IEnergyStorage {
  23.  
  24.   var tileBuffer: Array[TileBuffer] = null
  25.   var addedToEnet: Boolean = false
  26.  
  27.   override def updateEntity() {
  28.     if (!addedToEnet) onLoaded
  29.     if (worldObj != null) {
  30.       if (tileBuffer == null) {
  31.         tileBuffer = TileBuffer.makeBuffer(worldObj, xCoord, yCoord, zCoord, false)
  32.       }
  33.     }
  34.   }
  35.  
  36.   def onLoaded() {
  37.     if (!addedToEnet && !FMLCommonHandler.instance.getEffectiveSide.isClient && Info.isIc2Available) {
  38.       worldObj = parent.getWorldObj
  39.       xCoord = parent.xCoord
  40.       yCoord = parent.yCoord
  41.       zCoord = parent.zCoord
  42.       MinecraftForge.EVENT_BUS.post(new EnergyTileLoadEvent(this))
  43.       addedToEnet = true
  44.     }
  45.   }
  46.  
  47.   override def validate() {
  48.     tileBuffer = null
  49.   }
  50.  
  51.   override def invalidate() {
  52.     super.invalidate
  53.     onChunkUnload
  54.   }
  55.  
  56.   override def onChunkUnload(): Unit = {
  57.     if (addedToEnet && Info.isIc2Available) {
  58.       MinecraftForge.EVENT_BUS.post(new EnergyTileUnloadEvent(this))
  59.       addedToEnet = false
  60.     }
  61.   }
  62.  
  63.   override def readFromNBT(nbt: NBTTagCompound) {
  64.   }
  65.  
  66.   override def writeToNBT(nbt: NBTTagCompound) {
  67.   }
  68.  
  69.   def getTile(side: ForgeDirection): TileEntity = {
  70.     if (tileBuffer == null) {
  71.       tileBuffer = TileBuffer.makeBuffer(worldObj, xCoord, yCoord, zCoord, false)
  72.     }
  73.  
  74.     tileBuffer(side.ordinal).getTile
  75.   }
  76.  
  77.   /**
  78.    * Redstone Flux's energy reception
  79.    *
  80.    * @param maxReceive
  81.      * Maximum amount of energy to receive.
  82.    * @param simulate
  83.      * If TRUE, the charge will only be simulated.
  84.    **/
  85.   override def receiveEnergy(maxReceive: Int, simulate: Boolean): Int = {
  86.     0
  87.   }
  88.  
  89.   /**
  90.    * Redstone Flux's energy extraction
  91.    *
  92.    * @param maxExtract
  93.      * Maximum amount of energy to extract.
  94.    * @param simulate
  95.      * If TRUE, the extraction will only be simulated.
  96.    **/
  97.   override def extractEnergy(maxExtract: Int, simulate: Boolean): Int = {
  98.     if (battery.getRF() > maxExtract) {
  99.       battery.useRF(maxExtract, false)
  100.     } else {
  101.       battery.useRF(battery.getRF(), false)
  102.     }
  103.     0
  104.   }
  105.  
  106.   /**
  107.    * Redstone Flux's current energy storage
  108.    *
  109.    * @return
  110.    */
  111.   override def getEnergyStored(): Int = {
  112.     battery.getRF()
  113.   }
  114.  
  115.   /**
  116.    * Redstone Flux's max energy
  117.    *
  118.    * @return
  119.    */
  120.   override def getMaxEnergyStored(): Int = {
  121.     battery.getRF
  122.   }
  123.  
  124.   def canConnectEnergy(from: ForgeDirection): Boolean = {
  125.     if (dir == null) {
  126.       false
  127.     }
  128.     if (dir == ForgeDirection.UNKNOWN || dir == from) {
  129.       true
  130.     }
  131.     false
  132.   }
  133.  
  134.   override def emitsEnergyTo(receiver: TileEntity, direction: ForgeDirection): Boolean = {
  135.     true
  136.   }
  137.  
  138.   override def getOfferedEnergy: Double = {
  139.     Math.min(battery.getEU, EnergyNet.instance.getPowerFromTier(IC2EnergyUtils.getIC2TierFromEnergyRate(battery.transferRate)))
  140.   }
  141.  
  142.   override def drawEnergy(amount: Double) {
  143.     battery.useEU(amount, false)
  144.   }
  145.  
  146.   override def getSourceTier: Int = {
  147.     IC2EnergyUtils.getIC2TierFromEnergyRate(battery.transferRate)
  148.   }
  149.  
  150. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement