    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.buttonList.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        GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
    091        this.mc.renderEngine.bindTexture("/gui/inventory.png");
    092        int k = this.guiLeft;
    093        int l = this.guiTop;
    094        this.drawTexturedModalRect(k, l, 0, 0, this.xSize, this.ySize);
    095        drawPlayerOnGui(this.mc, k + 51, l + 75, 30, (float)(k + 51) - this.xSize_lo, (float)(l + 75 - 50) - this.ySize_lo);
    096    }
    097
    098    public static void drawPlayerOnGui(Minecraft par0Minecraft, int par1, int par2, int par3, float par4, float par5)
    099    {
    100        GL11.glEnable(GL11.GL_COLOR_MATERIAL);
    101        GL11.glPushMatrix();
    102        GL11.glTranslatef((float)par1, (float)par2, 50.0F);
    103        GL11.glScalef((float)(-par3), (float)par3, (float)par3);
    104        GL11.glRotatef(180.0F, 0.0F, 0.0F, 1.0F);
    105        float f2 = par0Minecraft.thePlayer.renderYawOffset;
    106        float f3 = par0Minecraft.thePlayer.rotationYaw;
    107        float f4 = par0Minecraft.thePlayer.rotationPitch;
    108        GL11.glRotatef(135.0F, 0.0F, 1.0F, 0.0F);
    109        RenderHelper.enableStandardItemLighting();
    110        GL11.glRotatef(-135.0F, 0.0F, 1.0F, 0.0F);
    111        GL11.glRotatef(-((float)Math.atan((double)(par5 / 40.0F))) * 20.0F, 1.0F, 0.0F, 0.0F);
    112        par0Minecraft.thePlayer.renderYawOffset = (float)Math.atan((double)(par4 / 40.0F)) * 20.0F;
    113        par0Minecraft.thePlayer.rotationYaw = (float)Math.atan((double)(par4 / 40.0F)) * 40.0F;
    114        par0Minecraft.thePlayer.rotationPitch = -((float)Math.atan((double)(par5 / 40.0F))) * 20.0F;
    115        par0Minecraft.thePlayer.rotationYawHead = par0Minecraft.thePlayer.rotationYaw;
    116        GL11.glTranslatef(0.0F, par0Minecraft.thePlayer.yOffset, 0.0F);
    117        RenderManager.instance.playerViewY = 180.0F;
    118        RenderManager.instance.renderEntityWithPosYaw(par0Minecraft.thePlayer, 0.0D, 0.0D, 0.0D, 0.0F, 1.0F);
    119        par0Minecraft.thePlayer.renderYawOffset = f2;
    120        par0Minecraft.thePlayer.rotationYaw = f3;
    121        par0Minecraft.thePlayer.rotationPitch = f4;
    122        GL11.glPopMatrix();
    123        RenderHelper.disableStandardItemLighting();
    124        GL11.glDisable(GL12.GL_RESCALE_NORMAL);
    125        OpenGlHelper.setActiveTexture(OpenGlHelper.lightmapTexUnit);
    126        GL11.glDisable(GL11.GL_TEXTURE_2D);
    127        OpenGlHelper.setActiveTexture(OpenGlHelper.defaultTexUnit);
    128    }
    129
    130    /**
    131     * Fired when a control is clicked. This is the equivalent of ActionListener.actionPerformed(ActionEvent e).
    132     */
    133    protected void actionPerformed(GuiButton par1GuiButton)
    134    {
    135        if (par1GuiButton.id == 0)
    136        {
    137            this.mc.displayGuiScreen(new GuiAchievements(this.mc.statFileWriter));
    138        }
    139
    140        if (par1GuiButton.id == 1)
    141        {
    142            this.mc.displayGuiScreen(new GuiStats(this, this.mc.statFileWriter));
    143        }
    144    }
    145}