electrodynamics/src/main/scala/edx/quantum/items/ItemFissileFuel.scala
2015-01-14 19:52:31 +08:00

95 lines
2.9 KiB
Scala

package edx.quantum.items
import java.util.List
import cpw.mods.fml.relauncher.{Side, SideOnly}
import edx.core.{EDXCreativeTab, Reference, Settings}
import edx.quantum.QuantumContent
import edx.quantum.machine.reactor.TileReactorCell
import net.minecraft.creativetab.CreativeTabs
import net.minecraft.item.{Item, ItemStack}
import net.minecraft.tileentity.TileEntity
import net.minecraft.world.World
import net.minecraftforge.common.util.ForgeDirection
import net.minecraftforge.fluids.FluidStack
import resonant.api.tile.{IReactor, IReactorComponent}
import resonant.lib.transform.vector.Vector3
import resonant.lib.wrapper.CollectionWrapper._
/**
* Fissile fuel rod
*/
object ItemFissileFuel
{
final val DECAY: Int = 2500
/**
* Temperature at which the fuel rod will begin to re-enrich itself.
*/
final val BREEDING_TEMP: Int = 1100
/**
* The energy in one KG of uranium is: 72PJ, 100TJ in one cell of uranium.
*/
final val ENERGY: Long = 100000000000L
/**
* Approximately 20,000,000J per tick. 400 MW.
*/
final val ENERGY_PER_TICK: Long = ENERGY / 50000
}
class ItemFissileFuel extends ItemRadioactive with IReactorComponent
{
//Constructor
this.setMaxStackSize(1)
this.setMaxDamage(ItemFissileFuel.DECAY)
this.setNoRepair
this.setUnlocalizedName(Reference.prefix + "rodBreederFuel")
this.setTextureName(Reference.prefix + "breederFuel")
setCreativeTab(EDXCreativeTab)
def onReact(itemStack: ItemStack, reactor: IReactor)
{
val tileEntity: TileEntity = reactor.asInstanceOf[TileEntity]
val worldObj: World = tileEntity.getWorldObj
var reactors: Int = 0
for (i <- 0 to 6)
{
val checkPos: Vector3 = new Vector3(tileEntity).add(ForgeDirection.getOrientation(i))
val tile: TileEntity = checkPos.getTileEntity(worldObj)
if (tile.isInstanceOf[TileReactorCell] && (tile.asInstanceOf[TileReactorCell]).getTemperature > ItemFissileFuel.BREEDING_TEMP)
{
reactors += 1
}
}
if (reactors >= 2)
{
if (worldObj.rand.nextInt(1000) <= 100 && reactor.getTemperature > (ItemFissileFuel.BREEDING_TEMP / 2))
{
val healAmt: Int = worldObj.rand.nextInt(5)
itemStack.setItemDamage(Math.max(itemStack.getItemDamage - healAmt, 0))
}
}
else
{
reactor.heat(ItemFissileFuel.ENERGY_PER_TICK)
if (reactor.world.getWorldTime % 20 == 0)
{
itemStack.setItemDamage(Math.min(itemStack.getItemDamage + 1, itemStack.getMaxDamage))
}
if (Settings.allowToxicWaste && worldObj.rand.nextFloat > 0.5)
{
val fluid: FluidStack = QuantumContent.getStackToxicWaste.copy
fluid.amount = 1
reactor.fill(ForgeDirection.UNKNOWN, fluid, true)
}
}
}
@SideOnly(Side.CLIENT) override def getSubItems(item: Item, par2CreativeTabs: CreativeTabs, par3List: List[_])
{
par3List.add(new ItemStack(item, 1, 0))
par3List.add(new ItemStack(item, 1, getMaxDamage - 1))
}
}