electrodynamics/src/main/scala/edx/quantum/blocks/TileElectromagnet.scala

130 lines
3.4 KiB
Scala

package edx.quantum.blocks
import java.util.List
import cpw.mods.fml.relauncher.{Side, SideOnly}
import net.minecraft.block.material.Material
import net.minecraft.client.renderer.texture.IIconRegister
import net.minecraft.creativetab.CreativeTabs
import net.minecraft.item.{Item, ItemStack}
import net.minecraft.util.IIcon
import net.minecraft.world.IBlockAccess
import net.minecraftforge.common.util.ForgeDirection
import org.lwjgl.opengl.GL11._
import resonantengine.api.tile.IElectromagnet
import resonantengine.lib.modcontent.block.ResonantBlock
import resonantengine.lib.render.{RenderBlockUtility, RenderUtility}
import resonantengine.lib.transform.vector.Vector3
import resonantengine.lib.utility.WorldUtility
import resonantengine.lib.wrapper.CollectionWrapper._
import resonantengine.prefab.block.itemblock.ItemBlockMetadata
/**
* Electromagnet block
*/
class TileElectromagnet extends ResonantBlock(Material.iron) with IElectromagnet
{
private val edgeTexture: String = "stone"
private var iconTop: IIcon = null
private var iconGlass: IIcon = null
//Constructor
blockResistance = 20
forceItemToRenderAsBlock = true
normalRender = false
isOpaqueCube = false
renderStaticBlock = true
this.itemBlock(classOf[ItemBlockMetadata])
override def getIcon(side: Int, metadata: Int): IIcon =
{
if (metadata == 1)
{
return iconGlass
}
if (side == 0 || side == 1)
{
return iconTop
}
return super.getIcon(side, metadata)
}
@SideOnly(Side.CLIENT) override def registerIcons(iconRegister: IIconRegister)
{
super.registerIcons(iconRegister)
iconTop = iconRegister.registerIcon(domain + textureName + "_top")
iconGlass = iconRegister.registerIcon(domain + "electromagnetGlass")
}
override def metadataDropped(meta: Int, fortune: Int): Int =
{
return meta
}
override def canUpdate: Boolean =
{
return false
}
override def shouldSideBeRendered(access: IBlockAccess, x: Int, y: Int, z: Int, side: Int): Boolean =
{
if (access.getBlockMetadata(x, y, z) != 1)
{
return super.shouldSideBeRendered(access, x, y, z, side)
}
return true
}
override def getRenderBlockPass: Int =
{
return 0
}
override def getSubBlocks(item: Item, par2CreativeTabs: CreativeTabs, par3List: List[_])
{
super.getSubBlocks(item, par2CreativeTabs, par3List)
par3List.add(new ItemStack(item, 1, 1))
}
def isRunning: Boolean =
{
return true
}
@SideOnly(Side.CLIENT)
override def renderInventory(itemStack: ItemStack)
{
if (itemStack != null)
{
glPushMatrix()
glTranslated(0.5, 0.5, 0.5)
RenderBlockUtility.tessellateBlockWithConnectedTextures(itemStack.getItemDamage(), block, null, RenderUtility.getIcon(edgeTexture))
glPopMatrix()
}
else
{
super.renderInventory(itemStack)
}
}
@SideOnly(Side.CLIENT)
override def renderDynamic(pos: Vector3, frame: Float, pass: Int)
{
var sideMap = 0
for (dir <- ForgeDirection.VALID_DIRECTIONS)
{
val check = toVectorWorld + dir
val checkTile = check.getTileEntity(world)
if (checkTile != null && checkTile.getClass == tile.getClass && check.getBlockMetadata(world) == tile.getBlockMetadata)
{
sideMap = WorldUtility.setEnableSide(sideMap, dir, true)
}
}
RenderBlockUtility.tessellateBlockWithConnectedTextures(sideMap, world, x.toInt, y.toInt, z.toInt, tile.getBlockType, null, RenderUtility.getIcon(edgeTexture))
}
}