package minefantasy.client;
import java.util.Random;
import minefantasy.block.tileentity.TileEntityOven;
import minefantasy.block.tileentity.TileEntityPrepBlock;
import minefantasy.system.cfg;
import minefantasy.system.data_minefantasy;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.ItemRenderer;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.client.renderer.tileentity.TileEntityRenderer;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.Icon;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL12;
/**
*
* @author Anonymous Productions
*
* Sources are provided for educational reasons. though small bits of
* code, or methods can be used in your own creations.
*/
public class TileEntityOvenRenderer extends TileEntitySpecialRenderer
{
private Random random = new Random();
public TileEntityOvenRenderer()
{
model = new ModelOven();
}
public TileEntityOvenRenderer(TileEntityRenderer render)
{
model = new ModelOven();
this.setTileEntityRenderer(render);
}
public void renderAModelAt(TileEntityOven tile, double d, double d1,
double d2, float f) {
if (tile != null)
;
int i = 1;
if (tile.worldObj != null) {
i = tile.direction; // this is for rotation
}
int j = 90 * i;
if (i == 0) {
j = 0;
}
if (i == 1) {
j = 270;
}
if (i == 2) {
j = 180;
}
if (i == 3) {
j = 90;
}
if (i == 4) {
j = 90;
}
String type = tile.getTexture();
bindTextureByName(data_minefantasy.image("/item/" + type + ".png")); // texture
boolean display = tile.isBurningClient;
GL11.glPushMatrix(); // start
float scale = 1.0F;
float offset = (1.0F - 0.0625F);
GL11.glTranslatef((float) d + 0.5F, (float) d1 + (4F / 16F), (float) d2 + 0.5F); // size
GL11.glRotatef(j + 180F, 0.0F, 1.0F, 0.0F);
GL11.glScalef(scale, -scale, -scale);
model.renderModel(display, 0.0625F);
float sc = 0.625F;
float openPixels = 10F/15F*(float) tile.doorAngle;
float angle = 90F / 15F * (float) tile.doorAngle;
GL11.glPushMatrix();
//DOOR
GL11.glTranslatef(pixel(0), pixel(2), -pixel(6));
GL11.glPushMatrix();
GL11.glScalef(sc, sc, sc);
GL11.glRotatef(angle, 1F, 0, 0);
renderHatch(tile, 0, 0, 12, 8, 128, 64);
GL11.glPopMatrix();//DOOR END
//SHELF
GL11.glTranslatef(pixel(0), -pixel(4.5F), -pixel(openPixels));
GL11.glPushMatrix();
GL11.glScalef(sc, sc, sc);
GL11.glRotatef(90, 1F, 0, 0);
renderRack(tile, 0, 37, 9, 9, 128, 64);
GL11.glPopMatrix();//SHELF END
GL11.glPopMatrix();
GL11.glTranslatef(0, -pixel(3.5F), -pixel(openPixels));
GL11.glPushMatrix();
GL11.glRotatef(90, 1, 0, 0);
try{
renderItem((TileEntityOven) tile, d, d1, d2, f);
}catch(Exception Ex)
{
if(cfg.renderWarnings){Minecraft.getMinecraft().thePlayer.addChatMessage("Don't put that in the oven.");}
}
GL11.glPopMatrix();
GL11.glPopMatrix(); // end
}
private void bindTextureByName(String image) {
bindTexture(TextureHelperMF.getResource(image));
}
public void renderTileEntityAt(TileEntity tileentity, double d, double d1,
double d2, float f) {
renderAModelAt((TileEntityOven) tileentity, d, d1, d2, f); // where to
// render
}
private void renderRack(TileEntityOven tile, int x, int y, int w, int h,
int tw, int th) {
Minecraft mc = Minecraft.getMinecraft();
float f = 0.01F / (float) tw;
float f1 = 0.01F / (float) th;
float x1 = (float) x / (float) tw + f;
float x2 = (float) (x + w) / tw - f;
float y1 = (float) y / th + f1;
float y2 = (float) (y + h) / th - f1;
Tessellator image = Tessellator.instance;
float xPos = 0.5F;
float yPos = 0.0F;
GL11.glEnable(GL12.GL_RESCALE_NORMAL);
GL11.glTranslatef(-xPos, -yPos, pixel(0.5F));
float var13 = 1F;
GL11.glScalef(var13, var13, var13);
GL11.glRotatef(180.0F, 0.0F, 0.0F, 1.0F);
GL11.glTranslatef(-1F, -1F, 0.0F);
ItemRenderer.renderItemIn2D(image, x2, y1, x1, y2, tw, th, 0.0625F);
}
private void renderHatch(TileEntityOven tile, int x, int y, int w,
int h, int tw, int th) {
Minecraft mc = Minecraft.getMinecraft();
float f = 0.01F / (float) tw;
float f1 = 0.01F / (float) th;
float x1 = (float) x / (float) tw + f;
float x2 = (float) (x + w) / tw - f;
float y1 = (float) y / th + f1;
float y2 = (float) (y + h) / th - f1;
Tessellator image = Tessellator.instance;
float xPos = 0.5F;
float yPos = 1.0F;
GL11.glEnable(GL12.GL_RESCALE_NORMAL);
GL11.glTranslatef(-xPos, -yPos, pixel(0.5F));
float var13 = 1F;
GL11.glScalef(var13, var13, var13);
GL11.glRotatef(180.0F, 0.0F, 0.0F, 1.0F);
GL11.glTranslatef(-1F, -1F, 0.0F);
ItemRenderer.renderItemIn2D(image, x2, y1, x1, y2, tw, th, 0.0625F);
}
public float pixel(float count) {
return count * 0.0625F;
}
private void renderItem(TileEntityOven tile, double d, double d1, double d2, float f)
{
Minecraft mc = Minecraft.getMinecraft();
ItemStack itemstack = tile.getStackInSlot(2);
if(itemstack == null)
{
itemstack = tile.getStackInSlot(0);
}
if(itemstack != null && itemstack.getItem() != null)
{
Block block = null;
if (itemstack.itemID < Block.blocksList.length)
{
block = Block.blocksList[itemstack.itemID];
}
int i;
float f4;
float f5;
float f6;
if (itemstack.getItemSpriteNumber() == 0 && block != null)
{
if(block.getRenderType() == cfg.renderId)
{
GL11.glTranslatef(-0.25F, 0.25F, -0.25F);
}
GL11.glRotatef(90, 1, 0, 0);
GL11.glTranslatef(0F, (2.5F * 0.0625F), 0F);
mc.renderEngine.bindTexture(TextureMap.locationBlocksTexture);
float f7 = 0.5F;
GL11.glScalef(f7, f7, f7);
byte b0 = 1;
for (i = 0; i < b0; ++i)
{
GL11.glPushMatrix();
if (i > 0)
{
f5 = (this.random.nextFloat() * 2.0F - 1.0F) * 0.2F / f7;
f4 = (this.random.nextFloat() * 2.0F - 1.0F) * 0.2F / f7;
f6 = (this.random .nextFloat() * 2.0F - 1.0F) * 0.2F / f7;
GL11.glTranslatef(f5, f4, f6);
}
f5 = 1.0F;
new RenderBlocks().renderBlockAsItem(block, itemstack.getItemDamage(), f5);
GL11.glPopMatrix();
}
}
else
{
Item item = itemstack.getItem();
mc.renderEngine.bindTexture(TextureMap.locationItemsTexture);
Tessellator image = Tessellator.instance;
Icon index = item.getIconFromDamage(itemstack.getItemDamage());
float x1 = index.getMinU();
float x2 = index.getMaxU();
float y1 = index.getMinV();
float y2 = index.getMaxV();
float xPos = 0.5F;
float yPos = 0.5F;
GL11.glEnable(GL12.GL_RESCALE_NORMAL);
GL11.glTranslatef(-xPos, -yPos, 0.0F);
float var13 = 1F;
GL11.glScalef(var13, var13, var13);
//GL11.glRotatef(50.0F, 0.0F, 1.0F, 0.0F);
GL11.glRotatef(180.0F, 0.0F, 0.0F, 1.0F);
GL11.glTranslatef(-0.75F, -0.75F, 0.0F);
GL11.glScalef(0.5F, 0.5F, 0.5F);
ItemRenderer.renderItemIn2D(image, x2, y1, x1, y2, index.getIconWidth(), index.getIconHeight(), 0.0625F);
GL11.glPushMatrix();
GL11.glPopMatrix();
}
}
}
private ModelOven model;
}