package net.minecraft.client.renderer.tileentity; import cpw.mods.fml.common.FMLLog; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import java.util.Calendar; import net.minecraft.block.Block; import net.minecraft.block.BlockChest; import net.minecraft.client.model.ModelChest; import net.minecraft.client.model.ModelLargeChest; import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntityChest; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL12; @SideOnly(Side.CLIENT) public class TileEntityChestRenderer extends TileEntitySpecialRenderer { /** The normal small chest model. */ private ModelChest chestModel = new ModelChest(); /** The large double chest model. */ private ModelChest largeChestModel = new ModelLargeChest(); /** If true, chests will be rendered with the Christmas present textures. */ private boolean isChristmas; public TileEntityChestRenderer() { Calendar calendar = Calendar.getInstance(); if (calendar.get(2) + 1 == 12 && calendar.get(5) >= 24 && calendar.get(5) <= 26) { this.isChristmas = true; } } /** * Renders the TileEntity for the chest at a position. */ public void renderTileEntityChestAt(TileEntityChest par1TileEntityChest, double par2, double par4, double par6, float par8) { int i; if (!par1TileEntityChest.func_70309_m()) { i = 0; } else { Block block = par1TileEntityChest.getBlockType(); i = par1TileEntityChest.getBlockMetadata(); if (block instanceof BlockChest && i == 0) { try { ((BlockChest)block).unifyAdjacentChests(par1TileEntityChest.getWorldObj(), par1TileEntityChest.xCoord, par1TileEntityChest.yCoord, par1TileEntityChest.zCoord); } catch (ClassCastException e) { FMLLog.severe("Attempted to render a chest at %d, %d, %d that was not a chest", par1TileEntityChest.xCoord, par1TileEntityChest.yCoord, par1TileEntityChest.zCoord); } i = par1TileEntityChest.getBlockMetadata(); } par1TileEntityChest.checkForAdjacentChests(); } if (par1TileEntityChest.adjacentChestZNeg == null && par1TileEntityChest.adjacentChestXNeg == null) { ModelChest modelchest; if (par1TileEntityChest.adjacentChestXPos == null && par1TileEntityChest.adjacentChestZPosition == null) { modelchest = this.chestModel; if (par1TileEntityChest.func_98041_l() == 1) { this.bindTextureByName("/item/chests/trap_small.png"); } else if (this.isChristmas) { this.bindTextureByName("/item/xmaschest.png"); } else { this.bindTextureByName("/item/chest.png"); } } else { modelchest = this.largeChestModel; if (par1TileEntityChest.func_98041_l() == 1) { this.bindTextureByName("/item/chests/trap_large.png"); } else if (this.isChristmas) { this.bindTextureByName("/item/largexmaschest.png"); } else { this.bindTextureByName("/item/largechest.png"); } } GL11.glPushMatrix(); GL11.glEnable(GL12.GL_RESCALE_NORMAL); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); GL11.glTranslatef((float)par2, (float)par4 + 1.0F, (float)par6 + 1.0F); GL11.glScalef(1.0F, -1.0F, -1.0F); GL11.glTranslatef(0.5F, 0.5F, 0.5F); short short1 = 0; if (i == 2) { short1 = 180; } if (i == 3) { short1 = 0; } if (i == 4) { short1 = 90; } if (i == 5) { short1 = -90; } if (i == 2 && par1TileEntityChest.adjacentChestXPos != null) { GL11.glTranslatef(1.0F, 0.0F, 0.0F); } if (i == 5 && par1TileEntityChest.adjacentChestZPosition != null) { GL11.glTranslatef(0.0F, 0.0F, -1.0F); } GL11.glRotatef((float)short1, 0.0F, 1.0F, 0.0F); GL11.glTranslatef(-0.5F, -0.5F, -0.5F); float f1 = par1TileEntityChest.prevLidAngle + (par1TileEntityChest.lidAngle - par1TileEntityChest.prevLidAngle) * par8; float f2; if (par1TileEntityChest.adjacentChestZNeg != null) { f2 = par1TileEntityChest.adjacentChestZNeg.prevLidAngle + (par1TileEntityChest.adjacentChestZNeg.lidAngle - par1TileEntityChest.adjacentChestZNeg.prevLidAngle) * par8; if (f2 > f1) { f1 = f2; } } if (par1TileEntityChest.adjacentChestXNeg != null) { f2 = par1TileEntityChest.adjacentChestXNeg.prevLidAngle + (par1TileEntityChest.adjacentChestXNeg.lidAngle - par1TileEntityChest.adjacentChestXNeg.prevLidAngle) * par8; if (f2 > f1) { f1 = f2; } } f1 = 1.0F - f1; f1 = 1.0F - f1 * f1 * f1; modelchest.chestLid.rotateAngleX = -(f1 * (float)Math.PI / 2.0F); modelchest.renderAll(); GL11.glDisable(GL12.GL_RESCALE_NORMAL); GL11.glPopMatrix(); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); } } public void renderTileEntityAt(TileEntity par1TileEntity, double par2, double par4, double par6, float par8) { this.renderTileEntityChestAt((TileEntityChest)par1TileEntity, par2, par4, par6, par8); } }