Advertisement
Guest User

Untitled

a guest
Sep 4th, 2014
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 4.68 KB | None | 0 0
  1. package darkevilmac.functionality.tileentity
  2.  
  3. import cofh.api.energy.IEnergyHandler
  4. import cpw.mods.fml.common.FMLCommonHandler
  5. import darkevilmac.functionality.energy.MultiBattery
  6. import darkevilmac.functionality.util.IC2EnergyUtils
  7. import ic2.api.energy.event.{EnergyTileLoadEvent, EnergyTileUnloadEvent}
  8. import ic2.api.energy.tile.IEnergySource
  9. import ic2.api.info.Info
  10. import net.minecraft.nbt.NBTTagCompound
  11. import net.minecraft.tileentity.TileEntity
  12. import net.minecraftforge.common.MinecraftForge
  13. import net.minecraftforge.common.util.ForgeDirection
  14.  
  15. /**
  16.  * A class you can add to your tileentity to emit energy from IC2, Buildcraft, and mods that support Redstone Flux
  17.  *
  18.  * @param dir the direction the tile can outputs from
  19.  * @param parent the the tile this is in
  20.  */
  21. class TileMultiPowerEmitter(var battery: MultiBattery, var dir: ForgeDirection, parent: TileEntity) extends TileEntity with IEnergySource with IEnergyHandler {
  22.  
  23.   var tileBuffer: Array[TileBuffer] = null
  24.   var addedToEnet: Boolean = false
  25.  
  26.   override def updateEntity() {
  27.     if (!addedToEnet) onLoaded
  28.     if (worldObj != null) {
  29.       if (tileBuffer == null) {
  30.         tileBuffer = TileBuffer.makeBuffer(worldObj, xCoord, yCoord, zCoord, false)
  31.       }
  32.     }
  33.   }
  34.  
  35.   def onLoaded() {
  36.     if (!addedToEnet && !FMLCommonHandler.instance.getEffectiveSide.isClient && Info.isIc2Available) {
  37.       worldObj = parent.getWorldObj
  38.       xCoord = parent.xCoord
  39.       yCoord = parent.yCoord
  40.       zCoord = parent.zCoord
  41.  
  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.     onChunkUnload
  53.   }
  54.  
  55.   override def onChunkUnload(): Unit = {
  56.     if (addedToEnet && Info.isIc2Available) {
  57.       MinecraftForge.EVENT_BUS.post(new EnergyTileUnloadEvent(this))
  58.       addedToEnet = false
  59.     }
  60.   }
  61.  
  62.   override def readFromNBT(nbt: NBTTagCompound) {
  63.   }
  64.  
  65.   override def writeToNBT(nbt: NBTTagCompound) {
  66.   }
  67.  
  68.   def getTile(side: ForgeDirection): TileEntity = {
  69.     if (tileBuffer == null) {
  70.       tileBuffer = TileBuffer.makeBuffer(worldObj, xCoord, yCoord, zCoord, false)
  71.     }
  72.  
  73.     tileBuffer(side.ordinal).getTile
  74.   }
  75.  
  76.   /**
  77.    * IC2's emitter direction
  78.    *
  79.    * @param receiver
  80.    * @param direction
  81.    * @return
  82.    */
  83.   override def emitsEnergyTo(receiver: TileEntity, direction: ForgeDirection): Boolean = {
  84.     if (dir == null || receiver == null) {
  85.       false
  86.     }
  87.     if (dir == ForgeDirection.UNKNOWN || dir == direction) {
  88.       true
  89.     }
  90.     false
  91.   }
  92.  
  93.   /**
  94.    *
  95.    * @return
  96.    */
  97.   override def getOfferedEnergy: Double = {
  98.     battery.getEU
  99.   }
  100.  
  101.   /**
  102.    * IC2's energy extraction
  103.    *
  104.    * @param amount
  105.    */
  106.   override def drawEnergy(amount: Double) = {
  107.     if (amount < 0) {
  108.       battery.addEU(amount, false)
  109.     } else {
  110.       battery.useEU(amount, false)
  111.     }
  112.   }
  113.  
  114.   /**
  115.    * The power tier used for IC2
  116.    *
  117.    * @return
  118.    */
  119.   override def getSourceTier: Int = {
  120.     IC2EnergyUtils.getIC2TierFromEnergyRate(battery.transferRate)
  121.   }
  122.  
  123.   /**
  124.    * Redstone Flux's energy reception
  125.    *
  126.    * @param from
  127.      * Orientation the energy is received from.
  128.    * @param maxReceive
  129.      * Maximum amount of energy to receive.
  130.    * @param simulate
  131.      * If TRUE, the charge will only be simulated.
  132.    **/
  133.   override def receiveEnergy(from: ForgeDirection, maxReceive: Int, simulate: Boolean): Int = {
  134.     0
  135.   }
  136.  
  137.   /**
  138.    * Redstone Flux's energy extraction
  139.    *
  140.    * @param from
  141.      * Orientation the energy is extracted from.
  142.    * @param maxExtract
  143.      * Maximum amount of energy to extract.
  144.    * @param simulate
  145.      * If TRUE, the extraction will only be simulated.
  146.    **/
  147.   override def extractEnergy(from: ForgeDirection, maxExtract: Int, simulate: Boolean): Int = {
  148.     if (dir == null) {
  149.       0
  150.     }
  151.     if (dir == ForgeDirection.UNKNOWN || dir == from) {
  152.       if (battery.getRF() > maxExtract) {
  153.         battery.useRF(maxExtract, false)
  154.       } else {
  155.         battery.useRF(battery.getRF(), false)
  156.       }
  157.     }
  158.     0
  159.   }
  160.  
  161.   /**
  162.    * Redstone Flux's current energy storage
  163.    *
  164.    * @param from
  165.    * @return
  166.    */
  167.   override def getEnergyStored(from: ForgeDirection): Int = {
  168.     battery.getRF()
  169.   }
  170.  
  171.   /**
  172.    * Redstone Flux's max energy
  173.    *
  174.    * @param from
  175.    * @return
  176.    */
  177.   override def getMaxEnergyStored(from: ForgeDirection): Int = {
  178.     battery.getRF
  179.   }
  180.  
  181.   override def canConnectEnergy(from: ForgeDirection): Boolean = {
  182.     if (dir == null) {
  183.       false
  184.     }
  185.     if (dir == ForgeDirection.UNKNOWN || dir == from) {
  186.       true
  187.     }
  188.     false
  189.   }
  190.  
  191.  
  192. }
  193.  
  194. class IC2Source
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement