001 package net.minecraft.client.renderer.tileentity; 002 003 import cpw.mods.fml.relauncher.Side; 004 import cpw.mods.fml.relauncher.SideOnly; 005 import net.minecraft.block.Block; 006 import net.minecraft.block.BlockPistonBase; 007 import net.minecraft.client.Minecraft; 008 import net.minecraft.client.renderer.RenderBlocks; 009 import net.minecraft.client.renderer.RenderHelper; 010 import net.minecraft.client.renderer.Tessellator; 011 import net.minecraft.tileentity.TileEntity; 012 import net.minecraft.tileentity.TileEntityPiston; 013 import net.minecraft.world.World; 014 import org.lwjgl.opengl.GL11; 015 016 import net.minecraftforge.client.ForgeHooksClient; 017 018 @SideOnly(Side.CLIENT) 019 public class TileEntityRendererPiston extends TileEntitySpecialRenderer 020 { 021 /** instance of RenderBlocks used to draw the piston base and extension. */ 022 private RenderBlocks blockRenderer; 023 024 public void renderPiston(TileEntityPiston par1TileEntityPiston, double par2, double par4, double par6, float par8) 025 { 026 Block var9 = Block.blocksList[par1TileEntityPiston.getStoredBlockID()]; 027 028 if (var9 != null && par1TileEntityPiston.getProgress(par8) < 1.0F) 029 { 030 Tessellator var10 = Tessellator.instance; 031 this.bindTextureByName("/terrain.png"); 032 RenderHelper.disableStandardItemLighting(); 033 GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); 034 GL11.glEnable(GL11.GL_BLEND); 035 GL11.glDisable(GL11.GL_CULL_FACE); 036 037 if (Minecraft.isAmbientOcclusionEnabled()) 038 { 039 GL11.glShadeModel(GL11.GL_SMOOTH); 040 } 041 else 042 { 043 GL11.glShadeModel(GL11.GL_FLAT); 044 } 045 046 ForgeHooksClient.beforeBlockRender(var9, blockRenderer); 047 var10.startDrawingQuads(); 048 var10.setTranslation((double)((float)par2 - (float)par1TileEntityPiston.xCoord + par1TileEntityPiston.getOffsetX(par8)), (double)((float)par4 - (float)par1TileEntityPiston.yCoord + par1TileEntityPiston.getOffsetY(par8)), (double)((float)par6 - (float)par1TileEntityPiston.zCoord + par1TileEntityPiston.getOffsetZ(par8))); 049 var10.setColorOpaque(1, 1, 1); 050 051 if (var9 == Block.pistonExtension && par1TileEntityPiston.getProgress(par8) < 0.5F) 052 { 053 this.blockRenderer.renderPistonExtensionAllFaces(var9, par1TileEntityPiston.xCoord, par1TileEntityPiston.yCoord, par1TileEntityPiston.zCoord, false); 054 } 055 else if (par1TileEntityPiston.shouldRenderHead() && !par1TileEntityPiston.isExtending()) 056 { 057 Block.pistonExtension.setHeadTexture(((BlockPistonBase)var9).getPistonExtensionTexture()); 058 this.blockRenderer.renderPistonExtensionAllFaces(Block.pistonExtension, par1TileEntityPiston.xCoord, par1TileEntityPiston.yCoord, par1TileEntityPiston.zCoord, par1TileEntityPiston.getProgress(par8) < 0.5F); 059 Block.pistonExtension.clearHeadTexture(); 060 var10.setTranslation((double)((float)par2 - (float)par1TileEntityPiston.xCoord), (double)((float)par4 - (float)par1TileEntityPiston.yCoord), (double)((float)par6 - (float)par1TileEntityPiston.zCoord)); 061 this.blockRenderer.renderPistonBaseAllFaces(var9, par1TileEntityPiston.xCoord, par1TileEntityPiston.yCoord, par1TileEntityPiston.zCoord); 062 } 063 else 064 { 065 this.blockRenderer.renderBlockAllFaces(var9, par1TileEntityPiston.xCoord, par1TileEntityPiston.yCoord, par1TileEntityPiston.zCoord); 066 } 067 068 var10.setTranslation(0.0D, 0.0D, 0.0D); 069 var10.draw(); 070 ForgeHooksClient.afterBlockRender(var9, blockRenderer); 071 RenderHelper.enableStandardItemLighting(); 072 } 073 } 074 075 /** 076 * Called when the ingame world being rendered changes (e.g. on world -> nether travel) due to using one renderer 077 * per tile entity type, rather than instance 078 */ 079 public void onWorldChange(World par1World) 080 { 081 this.blockRenderer = new RenderBlocks(par1World); 082 } 083 084 public void renderTileEntityAt(TileEntity par1TileEntity, double par2, double par4, double par6, float par8) 085 { 086 this.renderPiston((TileEntityPiston)par1TileEntity, par2, par4, par6, par8); 087 } 088 }