electrodynamics/src/main/scala/edx/quantum/machine/plasma/TilePlasma.scala
2015-01-26 18:17:24 +08:00

91 lines
2.3 KiB
Scala

package edx.quantum.machine.plasma
import java.util.ArrayList
import net.minecraft.block.material.Material
import net.minecraft.entity.Entity
import net.minecraft.init.Blocks
import net.minecraft.item.ItemStack
import net.minecraft.tileentity.TileEntity
import net.minecraft.util.DamageSource
import net.minecraft.world.IBlockAccess
import net.minecraftforge.common.MinecraftForge
import net.minecraftforge.common.util.ForgeDirection
import resonant.api.event.PlasmaEvent
import resonant.lib.grid.thermal.GridThermal
import resonant.lib.mod.config.Config
import resonant.lib.prefab.tile.spatial.ResonantTile
import resonant.lib.transform.vector.Vector3
object TilePlasma
{
@Config var plasmaMaxTemperature: Int = 1000000
}
class TilePlasma extends ResonantTile(Material.lava)
{
private var temperature: Double = TilePlasma.plasmaMaxTemperature
//Constructor
textureName = "plasma"
isOpaqueCube = false
override def getLightValue(access: IBlockAccess): Int =
{
return 7
}
override def isSolid(access: IBlockAccess, side: Int): Boolean =
{
return false
}
override def getDrops(metadata: Int, fortune: Int): ArrayList[ItemStack] =
{
return new ArrayList[ItemStack]
}
override def getRenderBlockPass: Int =
{
return 1
}
override def collide(entity: Entity)
{
entity.attackEntityFrom(DamageSource.inFire, 100)
}
override def update
{
super.update
GridThermal.addHeat(toVectorWorld, ((temperature - GridThermal.getTemperature(toVectorWorld)) * 0.1f).asInstanceOf[Float])
if (ticks % 20 == 0)
{
temperature /= 1.5
if (temperature <= TilePlasma.plasmaMaxTemperature / 10)
{
worldObj.setBlock(xCoord, yCoord, zCoord, Blocks.fire, 0, 3)
return
}
for (i <- 0 to 6)
{
if (worldObj.rand.nextFloat < 0.4)
{
val diDian: Vector3 = toVector3
diDian.add(ForgeDirection.getOrientation(i))
val tileEntity: TileEntity = diDian.getTileEntity(worldObj)
if (!(tileEntity.isInstanceOf[TilePlasma]))
{
MinecraftForge.EVENT_BUS.post(new PlasmaEvent.SpawnPlasmaEvent(worldObj, diDian.xi, diDian.yi, diDian.zi, temperature.asInstanceOf[Int]))
}
}
}
}
}
def setTemperature(newTemperature: Int)
{
temperature = newTemperature
}
}