130 lines
3.4 KiB
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))
|
|
}
|
|
|
|
}
|