001    package net.minecraft.client.gui.inventory;
002    
003    import cpw.mods.fml.relauncher.Side;
004    import cpw.mods.fml.relauncher.SideOnly;
005    import net.minecraft.client.Minecraft;
006    import net.minecraft.client.gui.GuiButton;
007    import net.minecraft.client.gui.achievement.GuiAchievements;
008    import net.minecraft.client.gui.achievement.GuiStats;
009    import net.minecraft.client.renderer.InventoryEffectRenderer;
010    import net.minecraft.client.renderer.OpenGlHelper;
011    import net.minecraft.client.renderer.RenderHelper;
012    import net.minecraft.client.renderer.entity.RenderManager;
013    import net.minecraft.entity.player.EntityPlayer;
014    import net.minecraft.stats.AchievementList;
015    import net.minecraft.util.StatCollector;
016    import org.lwjgl.opengl.GL11;
017    import org.lwjgl.opengl.GL12;
018    
019    @SideOnly(Side.CLIENT)
020    public class GuiInventory extends InventoryEffectRenderer
021    {
022        /**
023         * x size of the inventory window in pixels. Defined as float, passed as int
024         */
025        private float xSize_lo;
026    
027        /**
028         * y size of the inventory window in pixels. Defined as float, passed as int.
029         */
030        private float ySize_lo;
031    
032        public GuiInventory(EntityPlayer par1EntityPlayer)
033        {
034            super(par1EntityPlayer.inventoryContainer);
035            this.allowUserInput = true;
036            par1EntityPlayer.addStat(AchievementList.openInventory, 1);
037        }
038    
039        /**
040         * Called from the main game loop to update the screen.
041         */
042        public void updateScreen()
043        {
044            if (this.mc.playerController.isInCreativeMode())
045            {
046                this.mc.displayGuiScreen(new GuiContainerCreative(this.mc.thePlayer));
047            }
048        }
049    
050        /**
051         * Adds the buttons (and other controls) to the screen in question.
052         */
053        public void initGui()
054        {
055            this.controlList.clear();
056    
057            if (this.mc.playerController.isInCreativeMode())
058            {
059                this.mc.displayGuiScreen(new GuiContainerCreative(this.mc.thePlayer));
060            }
061            else
062            {
063                super.initGui();
064            }
065        }
066    
067        /**
068         * Draw the foreground layer for the GuiContainer (everything in front of the items)
069         */
070        protected void drawGuiContainerForegroundLayer(int par1, int par2)
071        {
072            this.fontRenderer.drawString(StatCollector.translateToLocal("container.crafting"), 86, 16, 4210752);
073        }
074    
075        /**
076         * Draws the screen and all the components in it.
077         */
078        public void drawScreen(int par1, int par2, float par3)
079        {
080            super.drawScreen(par1, par2, par3);
081            this.xSize_lo = (float)par1;
082            this.ySize_lo = (float)par2;
083        }
084    
085        /**
086         * Draw the background layer for the GuiContainer (everything behind the items)
087         */
088        protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3)
089        {
090            int var4 = this.mc.renderEngine.getTexture("/gui/inventory.png");
091            GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
092            this.mc.renderEngine.bindTexture(var4);
093            int var5 = this.guiLeft;
094            int var6 = this.guiTop;
095            this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize, this.ySize);
096            func_74223_a(this.mc, var5 + 51, var6 + 75, 30, (float)(var5 + 51) - this.xSize_lo, (float)(var6 + 75 - 50) - this.ySize_lo);
097        }
098    
099        public static void func_74223_a(Minecraft par0Minecraft, int par1, int par2, int par3, float par4, float par5)
100        {
101            GL11.glEnable(GL11.GL_COLOR_MATERIAL);
102            GL11.glPushMatrix();
103            GL11.glTranslatef((float)par1, (float)par2, 50.0F);
104            GL11.glScalef((float)(-par3), (float)par3, (float)par3);
105            GL11.glRotatef(180.0F, 0.0F, 0.0F, 1.0F);
106            float var6 = par0Minecraft.thePlayer.renderYawOffset;
107            float var7 = par0Minecraft.thePlayer.rotationYaw;
108            float var8 = par0Minecraft.thePlayer.rotationPitch;
109            GL11.glRotatef(135.0F, 0.0F, 1.0F, 0.0F);
110            RenderHelper.enableStandardItemLighting();
111            GL11.glRotatef(-135.0F, 0.0F, 1.0F, 0.0F);
112            GL11.glRotatef(-((float)Math.atan((double)(par5 / 40.0F))) * 20.0F, 1.0F, 0.0F, 0.0F);
113            par0Minecraft.thePlayer.renderYawOffset = (float)Math.atan((double)(par4 / 40.0F)) * 20.0F;
114            par0Minecraft.thePlayer.rotationYaw = (float)Math.atan((double)(par4 / 40.0F)) * 40.0F;
115            par0Minecraft.thePlayer.rotationPitch = -((float)Math.atan((double)(par5 / 40.0F))) * 20.0F;
116            par0Minecraft.thePlayer.rotationYawHead = par0Minecraft.thePlayer.rotationYaw;
117            GL11.glTranslatef(0.0F, par0Minecraft.thePlayer.yOffset, 0.0F);
118            RenderManager.instance.playerViewY = 180.0F;
119            RenderManager.instance.renderEntityWithPosYaw(par0Minecraft.thePlayer, 0.0D, 0.0D, 0.0D, 0.0F, 1.0F);
120            par0Minecraft.thePlayer.renderYawOffset = var6;
121            par0Minecraft.thePlayer.rotationYaw = var7;
122            par0Minecraft.thePlayer.rotationPitch = var8;
123            GL11.glPopMatrix();
124            RenderHelper.disableStandardItemLighting();
125            GL11.glDisable(GL12.GL_RESCALE_NORMAL);
126            OpenGlHelper.setActiveTexture(OpenGlHelper.lightmapTexUnit);
127            GL11.glDisable(GL11.GL_TEXTURE_2D);
128            OpenGlHelper.setActiveTexture(OpenGlHelper.defaultTexUnit);
129        }
130    
131        /**
132         * Fired when a control is clicked. This is the equivalent of ActionListener.actionPerformed(ActionEvent e).
133         */
134        protected void actionPerformed(GuiButton par1GuiButton)
135        {
136            if (par1GuiButton.id == 0)
137            {
138                this.mc.displayGuiScreen(new GuiAchievements(this.mc.statFileWriter));
139            }
140    
141            if (par1GuiButton.id == 1)
142            {
143                this.mc.displayGuiScreen(new GuiStats(this, this.mc.statFileWriter));
144            }
145        }
146    }