001package net.minecraft.client.gui.inventory;
002
003import cpw.mods.fml.relauncher.Side;
004import cpw.mods.fml.relauncher.SideOnly;
005import net.minecraft.client.Minecraft;
006import net.minecraft.client.gui.GuiButton;
007import net.minecraft.client.gui.achievement.GuiAchievements;
008import net.minecraft.client.gui.achievement.GuiStats;
009import net.minecraft.client.renderer.InventoryEffectRenderer;
010import net.minecraft.client.renderer.OpenGlHelper;
011import net.minecraft.client.renderer.RenderHelper;
012import net.minecraft.client.renderer.entity.RenderManager;
013import net.minecraft.entity.player.EntityPlayer;
014import net.minecraft.stats.AchievementList;
015import net.minecraft.util.StatCollector;
016import org.lwjgl.opengl.GL11;
017import org.lwjgl.opengl.GL12;
018
019@SideOnly(Side.CLIENT)
020public 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        drawPlayerOnGui(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 drawPlayerOnGui(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}