001 package net.minecraft.client.renderer.tileentity; 002 003 import cpw.mods.fml.relauncher.Side; 004 import cpw.mods.fml.relauncher.SideOnly; 005 import java.util.Calendar; 006 import net.minecraft.block.Block; 007 import net.minecraft.block.BlockChest; 008 import net.minecraft.client.model.ModelChest; 009 import net.minecraft.client.model.ModelLargeChest; 010 import net.minecraft.tileentity.TileEntity; 011 import net.minecraft.tileentity.TileEntityChest; 012 import org.lwjgl.opengl.GL11; 013 import org.lwjgl.opengl.GL12; 014 015 @SideOnly(Side.CLIENT) 016 public class TileEntityChestRenderer extends TileEntitySpecialRenderer 017 { 018 /** The normal small chest model. */ 019 private ModelChest chestModel = new ModelChest(); 020 021 /** The large double chest model. */ 022 private ModelChest largeChestModel = new ModelLargeChest(); 023 private boolean field_92061_d; 024 025 public TileEntityChestRenderer() 026 { 027 Calendar var1 = Calendar.getInstance(); 028 029 if (var1.get(2) + 1 == 12 && var1.get(5) >= 24 && var1.get(5) <= 26) 030 { 031 this.field_92061_d = true; 032 } 033 } 034 035 /** 036 * Renders the TileEntity for the chest at a position. 037 */ 038 public void renderTileEntityChestAt(TileEntityChest par1TileEntityChest, double par2, double par4, double par6, float par8) 039 { 040 int var9; 041 042 if (!par1TileEntityChest.func_70309_m()) 043 { 044 var9 = 0; 045 } 046 else 047 { 048 Block var10 = par1TileEntityChest.getBlockType(); 049 var9 = par1TileEntityChest.getBlockMetadata(); 050 051 if (var10 != null && var9 == 0) 052 { 053 ((BlockChest)var10).unifyAdjacentChests(par1TileEntityChest.getWorldObj(), par1TileEntityChest.xCoord, par1TileEntityChest.yCoord, par1TileEntityChest.zCoord); 054 var9 = par1TileEntityChest.getBlockMetadata(); 055 } 056 057 par1TileEntityChest.checkForAdjacentChests(); 058 } 059 060 if (par1TileEntityChest.adjacentChestZNeg == null && par1TileEntityChest.adjacentChestXNeg == null) 061 { 062 ModelChest var14; 063 064 if (par1TileEntityChest.adjacentChestXPos == null && par1TileEntityChest.adjacentChestZPosition == null) 065 { 066 var14 = this.chestModel; 067 068 if (this.field_92061_d) 069 { 070 this.bindTextureByName("/item/xmaschest.png"); 071 } 072 else 073 { 074 this.bindTextureByName("/item/chest.png"); 075 } 076 } 077 else 078 { 079 var14 = this.largeChestModel; 080 081 if (this.field_92061_d) 082 { 083 this.bindTextureByName("/item/largexmaschest.png"); 084 } 085 else 086 { 087 this.bindTextureByName("/item/largechest.png"); 088 } 089 } 090 091 GL11.glPushMatrix(); 092 GL11.glEnable(GL12.GL_RESCALE_NORMAL); 093 GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); 094 GL11.glTranslatef((float)par2, (float)par4 + 1.0F, (float)par6 + 1.0F); 095 GL11.glScalef(1.0F, -1.0F, -1.0F); 096 GL11.glTranslatef(0.5F, 0.5F, 0.5F); 097 short var11 = 0; 098 099 if (var9 == 2) 100 { 101 var11 = 180; 102 } 103 104 if (var9 == 3) 105 { 106 var11 = 0; 107 } 108 109 if (var9 == 4) 110 { 111 var11 = 90; 112 } 113 114 if (var9 == 5) 115 { 116 var11 = -90; 117 } 118 119 if (var9 == 2 && par1TileEntityChest.adjacentChestXPos != null) 120 { 121 GL11.glTranslatef(1.0F, 0.0F, 0.0F); 122 } 123 124 if (var9 == 5 && par1TileEntityChest.adjacentChestZPosition != null) 125 { 126 GL11.glTranslatef(0.0F, 0.0F, -1.0F); 127 } 128 129 GL11.glRotatef((float)var11, 0.0F, 1.0F, 0.0F); 130 GL11.glTranslatef(-0.5F, -0.5F, -0.5F); 131 float var12 = par1TileEntityChest.prevLidAngle + (par1TileEntityChest.lidAngle - par1TileEntityChest.prevLidAngle) * par8; 132 float var13; 133 134 if (par1TileEntityChest.adjacentChestZNeg != null) 135 { 136 var13 = par1TileEntityChest.adjacentChestZNeg.prevLidAngle + (par1TileEntityChest.adjacentChestZNeg.lidAngle - par1TileEntityChest.adjacentChestZNeg.prevLidAngle) * par8; 137 138 if (var13 > var12) 139 { 140 var12 = var13; 141 } 142 } 143 144 if (par1TileEntityChest.adjacentChestXNeg != null) 145 { 146 var13 = par1TileEntityChest.adjacentChestXNeg.prevLidAngle + (par1TileEntityChest.adjacentChestXNeg.lidAngle - par1TileEntityChest.adjacentChestXNeg.prevLidAngle) * par8; 147 148 if (var13 > var12) 149 { 150 var12 = var13; 151 } 152 } 153 154 var12 = 1.0F - var12; 155 var12 = 1.0F - var12 * var12 * var12; 156 var14.chestLid.rotateAngleX = -(var12 * (float)Math.PI / 2.0F); 157 var14.renderAll(); 158 GL11.glDisable(GL12.GL_RESCALE_NORMAL); 159 GL11.glPopMatrix(); 160 GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); 161 } 162 } 163 164 public void renderTileEntityAt(TileEntity par1TileEntity, double par2, double par4, double par6, float par8) 165 { 166 this.renderTileEntityChestAt((TileEntityChest)par1TileEntity, par2, par4, par6, par8); 167 } 168 }