    001    package net.minecraft.src;
    002
    003    import cpw.mods.fml.common.Side;
    004    import cpw.mods.fml.common.asm.SideOnly;
    005    import java.util.Random;
    006    import org.lwjgl.opengl.GL11;
    007    import org.lwjgl.opengl.GL12;
    008    import org.lwjgl.util.glu.GLU;
    009
    010    @SideOnly(Side.CLIENT)
    011    public class GuiEnchantment extends GuiContainer
    012    {
    013        /** The book model used on the GUI. */
    014        private static ModelBook bookModel = new ModelBook();
    015        private Random rand = new Random();
    016
    017        /** ContainerEnchantment object associated with this gui */
    018        private ContainerEnchantment containerEnchantment;
    019        public int field_74214_o;
    020        public float field_74213_p;
    021        public float field_74212_q;
    022        public float field_74211_r;
    023        public float field_74210_s;
    024        public float field_74209_t;
    025        public float field_74208_u;
    026        ItemStack theItemStack;
    027
    028        public GuiEnchantment(InventoryPlayer par1InventoryPlayer, World par2World, int par3, int par4, int par5)
    029        {
    030            super(new ContainerEnchantment(par1InventoryPlayer, par2World, par3, par4, par5));
    031            this.containerEnchantment = (ContainerEnchantment)this.inventorySlots;
    032        }
    033
    034        /**
    035         * Draw the foreground layer for the GuiContainer (everything in front of the items)
    036         */
    037        protected void drawGuiContainerForegroundLayer(int par1, int par2)
    038        {
    039            this.fontRenderer.drawString(StatCollector.translateToLocal("container.enchant"), 12, 6, 4210752);
    040            this.fontRenderer.drawString(StatCollector.translateToLocal("container.inventory"), 8, this.ySize - 96 + 2, 4210752);
    041        }
    042
    043        /**
    044         * Called from the main game loop to update the screen.
    045         */
    046        public void updateScreen()
    047        {
    048            super.updateScreen();
    049            this.func_74205_h();
    050        }
    051
    052        /**
    053         * Called when the mouse is clicked.
    054         */
    055        protected void mouseClicked(int par1, int par2, int par3)
    056        {
    057            super.mouseClicked(par1, par2, par3);
    058            int var4 = (this.width - this.xSize) / 2;
    059            int var5 = (this.height - this.ySize) / 2;
    060
    061            for (int var6 = 0; var6 < 3; ++var6)
    062            {
    063                int var7 = par1 - (var4 + 60);
    064                int var8 = par2 - (var5 + 14 + 19 * var6);
    065
    066                if (var7 >= 0 && var8 >= 0 && var7 < 108 && var8 < 19 && this.containerEnchantment.enchantItem(this.mc.thePlayer, var6))
    067                {
    068                    this.mc.playerController.sendEnchantPacket(this.containerEnchantment.windowId, var6);
    069                }
    070            }
    071        }
    072
    073        /**
    074         * Draw the background layer for the GuiContainer (everything behind the items)
    075         */
    076        protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3)
    077        {
    078            int var4 = this.mc.renderEngine.getTexture("/gui/enchant.png");
    079            GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
    080            this.mc.renderEngine.bindTexture(var4);
    081            int var5 = (this.width - this.xSize) / 2;
    082            int var6 = (this.height - this.ySize) / 2;
    083            this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize, this.ySize);
    084            GL11.glPushMatrix();
    085            GL11.glMatrixMode(GL11.GL_PROJECTION);
    086            GL11.glPushMatrix();
    087            GL11.glLoadIdentity();
    088            ScaledResolution var7 = new ScaledResolution(this.mc.gameSettings, this.mc.displayWidth, this.mc.displayHeight);
    089            GL11.glViewport((var7.getScaledWidth() - 320) / 2 * var7.getScaleFactor(), (var7.getScaledHeight() - 240) / 2 * var7.getScaleFactor(), 320 * var7.getScaleFactor(), 240 * var7.getScaleFactor());
    090            GL11.glTranslatef(-0.34F, 0.23F, 0.0F);
    091            GLU.gluPerspective(90.0F, 1.3333334F, 9.0F, 80.0F);
    092            float var8 = 1.0F;
    093            GL11.glMatrixMode(GL11.GL_MODELVIEW);
    094            GL11.glLoadIdentity();
    095            RenderHelper.enableStandardItemLighting();
    096            GL11.glTranslatef(0.0F, 3.3F, -16.0F);
    097            GL11.glScalef(var8, var8, var8);
    098            float var9 = 5.0F;
    099            GL11.glScalef(var9, var9, var9);
    100            GL11.glRotatef(180.0F, 0.0F, 0.0F, 1.0F);
    101            this.mc.renderEngine.bindTexture(this.mc.renderEngine.getTexture("/item/book.png"));
    102            GL11.glRotatef(20.0F, 1.0F, 0.0F, 0.0F);
    103            float var10 = this.field_74208_u + (this.field_74209_t - this.field_74208_u) * par1;
    104            GL11.glTranslatef((1.0F - var10) * 0.2F, (1.0F - var10) * 0.1F, (1.0F - var10) * 0.25F);
    105            GL11.glRotatef(-(1.0F - var10) * 90.0F - 90.0F, 0.0F, 1.0F, 0.0F);
    106            GL11.glRotatef(180.0F, 1.0F, 0.0F, 0.0F);
    107            float var11 = this.field_74212_q + (this.field_74213_p - this.field_74212_q) * par1 + 0.25F;
    108            float var12 = this.field_74212_q + (this.field_74213_p - this.field_74212_q) * par1 + 0.75F;
    109            var11 = (var11 - (float)MathHelper.truncateDoubleToInt((double)var11)) * 1.6F - 0.3F;
    110            var12 = (var12 - (float)MathHelper.truncateDoubleToInt((double)var12)) * 1.6F - 0.3F;
    111
    112            if (var11 < 0.0F)
    113            {
    114                var11 = 0.0F;
    115            }
    116
    117            if (var12 < 0.0F)
    118            {
    119                var12 = 0.0F;
    120            }
    121
    122            if (var11 > 1.0F)
    123            {
    124                var11 = 1.0F;
    125            }
    126
    127            if (var12 > 1.0F)
    128            {
    129                var12 = 1.0F;
    130            }
    131
    132            GL11.glEnable(GL12.GL_RESCALE_NORMAL);
    133            bookModel.render((Entity)null, 0.0F, var11, var12, var10, 0.0F, 0.0625F);
    134            GL11.glDisable(GL12.GL_RESCALE_NORMAL);
    135            RenderHelper.disableStandardItemLighting();
    136            GL11.glMatrixMode(GL11.GL_PROJECTION);
    137            GL11.glViewport(0, 0, this.mc.displayWidth, this.mc.displayHeight);
    138            GL11.glPopMatrix();
    139            GL11.glMatrixMode(GL11.GL_MODELVIEW);
    140            GL11.glPopMatrix();
    141            RenderHelper.disableStandardItemLighting();
    142            GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
    143            this.mc.renderEngine.bindTexture(var4);
    144            EnchantmentNameParts.instance.setRandSeed(this.containerEnchantment.nameSeed);
    145
    146            for (int var13 = 0; var13 < 3; ++var13)
    147            {
    148                String var14 = EnchantmentNameParts.instance.generateRandomEnchantName();
    149                this.zLevel = 0.0F;
    150                this.mc.renderEngine.bindTexture(var4);
    151                int var15 = this.containerEnchantment.enchantLevels[var13];
    152                GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
    153
    154                if (var15 == 0)
    155                {
    156                    this.drawTexturedModalRect(var5 + 60, var6 + 14 + 19 * var13, 0, 185, 108, 19);
    157                }
    158                else
    159                {
    160                    String var16 = "" + var15;
    161                    FontRenderer var17 = this.mc.standardGalacticFontRenderer;
    162                    int var18 = 6839882;
    163
    164                    if (this.mc.thePlayer.experienceLevel < var15 && !this.mc.thePlayer.capabilities.isCreativeMode)
    165                    {
    166                        this.drawTexturedModalRect(var5 + 60, var6 + 14 + 19 * var13, 0, 185, 108, 19);
    167                        var17.drawSplitString(var14, var5 + 62, var6 + 16 + 19 * var13, 104, (var18 & 16711422) >> 1);
    168                        var17 = this.mc.fontRenderer;
    169                        var18 = 4226832;
    170                        var17.drawStringWithShadow(var16, var5 + 62 + 104 - var17.getStringWidth(var16), var6 + 16 + 19 * var13 + 7, var18);
    171                    }
    172                    else
    173                    {
    174                        int var19 = par2 - (var5 + 60);
    175                        int var20 = par3 - (var6 + 14 + 19 * var13);
    176
    177                        if (var19 >= 0 && var20 >= 0 && var19 < 108 && var20 < 19)
    178                        {
    179                            this.drawTexturedModalRect(var5 + 60, var6 + 14 + 19 * var13, 0, 204, 108, 19);
    180                            var18 = 16777088;
    181                        }
    182                        else
    183                        {
    184                            this.drawTexturedModalRect(var5 + 60, var6 + 14 + 19 * var13, 0, 166, 108, 19);
    185                        }
    186
    187                        var17.drawSplitString(var14, var5 + 62, var6 + 16 + 19 * var13, 104, var18);
    188                        var17 = this.mc.fontRenderer;
    189                        var18 = 8453920;
    190                        var17.drawStringWithShadow(var16, var5 + 62 + 104 - var17.getStringWidth(var16), var6 + 16 + 19 * var13 + 7, var18);
    191                    }
    192                }
    193            }
    194        }
    195
    196        public void func_74205_h()
    197        {
    198            ItemStack var1 = this.inventorySlots.getSlot(0).getStack();
    199
    200            if (!ItemStack.areItemStacksEqual(var1, this.theItemStack))
    201            {
    202                this.theItemStack = var1;
    203
    204                do
    205                {
    206                    this.field_74211_r += (float)(this.rand.nextInt(4) - this.rand.nextInt(4));
    207                }
    208                while (this.field_74213_p <= this.field_74211_r + 1.0F && this.field_74213_p >= this.field_74211_r - 1.0F);
    209            }
    210
    211            ++this.field_74214_o;
    212            this.field_74212_q = this.field_74213_p;
    213            this.field_74208_u = this.field_74209_t;
    214            boolean var2 = false;
    215
    216            for (int var3 = 0; var3 < 3; ++var3)
    217            {
    218                if (this.containerEnchantment.enchantLevels[var3] != 0)
    219                {
    220                    var2 = true;
    221                }
    222            }
    223
    224            if (var2)
    225            {
    226                this.field_74209_t += 0.2F;
    227            }
    228            else
    229            {
    230                this.field_74209_t -= 0.2F;
    231            }
    232
    233            if (this.field_74209_t < 0.0F)
    234            {
    235                this.field_74209_t = 0.0F;
    236            }
    237
    238            if (this.field_74209_t > 1.0F)
    239            {
    240                this.field_74209_t = 1.0F;
    241            }
    242
    243            float var5 = (this.field_74211_r - this.field_74213_p) * 0.4F;
    244            float var4 = 0.2F;
    245
    246            if (var5 < -var4)
    247            {
    248                var5 = -var4;
    249            }
    250
    251            if (var5 > var4)
    252            {
    253                var5 = var4;
    254            }
    255
    256            this.field_74210_s += (var5 - this.field_74210_s) * 0.9F;
    257            this.field_74213_p += this.field_74210_s;
    258        }
    259    }