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 }