Example #1
0
        public virtual void RenderPiston(TileEntityPiston par1TileEntityPiston, double par2, double par4, double par6, float par8)
        {
            Block block = Block.BlocksList[par1TileEntityPiston.GetStoredBlockID()];

            if (block != null && par1TileEntityPiston.GetProgress(par8) < 1.0F)
            {
                Tessellator tessellator = Tessellator.Instance;
                BindTextureByName("/terrain.png");
                RenderHelper.DisableStandardItemLighting();
                //GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha);
                //GL.Enable(EnableCap.Blend);
                //GL.Disable(EnableCap.CullFace);

                if (Minecraft.IsAmbientOcclusionEnabled())
                {
                    //GL.ShadeModel(ShadingModel.Smooth);
                }
                else
                {
                    //GL.ShadeModel(ShadingModel.Flat);
                }

                tessellator.StartDrawingQuads();
                tessellator.SetTranslation(((float)par2 - (float)par1TileEntityPiston.XCoord) + par1TileEntityPiston.GetOffsetX(par8), ((float)par4 - (float)par1TileEntityPiston.YCoord) + par1TileEntityPiston.GetOffsetY(par8), ((float)par6 - (float)par1TileEntityPiston.ZCoord) + par1TileEntityPiston.GetOffsetZ(par8));
                tessellator.SetColorOpaque(1, 1, 1);

                if (block == Block.PistonExtension && par1TileEntityPiston.GetProgress(par8) < 0.5F)
                {
                    BlockRenderer.RenderPistonExtensionAllFaces(block, par1TileEntityPiston.XCoord, par1TileEntityPiston.YCoord, par1TileEntityPiston.ZCoord, false);
                }
                else if (par1TileEntityPiston.ShouldRenderHead() && !par1TileEntityPiston.IsExtending())
                {
                    Block.PistonExtension.SetHeadTexture(((BlockPistonBase)block).GetPistonExtensionTexture());
                    BlockRenderer.RenderPistonExtensionAllFaces(Block.PistonExtension, par1TileEntityPiston.XCoord, par1TileEntityPiston.YCoord, par1TileEntityPiston.ZCoord, par1TileEntityPiston.GetProgress(par8) < 0.5F);
                    Block.PistonExtension.ClearHeadTexture();
                    tessellator.SetTranslation((float)par2 - (float)par1TileEntityPiston.XCoord, (float)par4 - (float)par1TileEntityPiston.YCoord, (float)par6 - (float)par1TileEntityPiston.ZCoord);
                    BlockRenderer.RenderPistonBaseAllFaces(block, par1TileEntityPiston.XCoord, par1TileEntityPiston.YCoord, par1TileEntityPiston.ZCoord);
                }
                else
                {
                    BlockRenderer.RenderBlockAllFaces(block, par1TileEntityPiston.XCoord, par1TileEntityPiston.YCoord, par1TileEntityPiston.ZCoord);
                }

                tessellator.SetTranslation(0.0F, 0.0F, 0.0F);
                tessellator.Draw();
                RenderHelper.EnableStandardItemLighting();
            }
        }
        /// <summary>
        /// Updates the blocks bounds based on its current state. Args: world, x, y, z
        /// </summary>
        public override void SetBlockBoundsBasedOnState(IBlockAccess par1IBlockAccess, int par2, int par3, int par4)
        {
            TileEntityPiston tileentitypiston = GetTileEntityAtLocation(par1IBlockAccess, par2, par3, par4);

            if (tileentitypiston != null)
            {
                Block block = Block.BlocksList[tileentitypiston.GetStoredBlockID()];

                if (block == null || block == this)
                {
                    return;
                }

                block.SetBlockBoundsBasedOnState(par1IBlockAccess, par2, par3, par4);
                float f = tileentitypiston.GetProgress(0.0F);

                if (tileentitypiston.IsExtending())
                {
                    f = 1.0F - f;
                }

                int i = tileentitypiston.GetPistonOrientation();
                MinX = block.MinX - (Facing.OffsetsXForSide[i] * f);
                MinY = block.MinY - (Facing.OffsetsYForSide[i] * f);
                MinZ = block.MinZ - (Facing.OffsetsZForSide[i] * f);
                MaxX = block.MaxX - (Facing.OffsetsXForSide[i] * f);
                MaxY = block.MaxY - (Facing.OffsetsYForSide[i] * f);
                MaxZ = block.MaxZ - (Facing.OffsetsZForSide[i] * f);
            }
        }
        /// <summary>
        /// Returns a bounding box from the pool of bounding boxes (this means this box can change after the pool has been
        /// cleared to be reused)
        /// </summary>
        public override AxisAlignedBB GetCollisionBoundingBoxFromPool(World par1World, int par2, int par3, int par4)
        {
            TileEntityPiston tileentitypiston = GetTileEntityAtLocation(par1World, par2, par3, par4);

            if (tileentitypiston == null)
            {
                return(null);
            }

            float f = tileentitypiston.GetProgress(0.0F);

            if (tileentitypiston.IsExtending())
            {
                f = 1.0F - f;
            }

            return(GetAxisAlignedBB(par1World, par2, par3, par4, tileentitypiston.GetStoredBlockID(), f, tileentitypiston.GetPistonOrientation()));
        }