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.ArrayList;
006    import java.util.Iterator;
007    import java.util.List;
008    import org.lwjgl.input.Keyboard;
009    import org.lwjgl.input.Mouse;
010    import org.lwjgl.opengl.GL11;
011    import org.lwjgl.opengl.GL12;
012    
013    @SideOnly(Side.CLIENT)
014    public class GuiContainerCreative extends InventoryEffectRenderer
015    {
016        private static InventoryBasic inventory = new InventoryBasic("tmp", 45);
017    
018        /** Currently selected creative inventory tab index. */
019        private static int selectedTabIndex = CreativeTabs.tabBlock.getTabIndex();
020    
021        /** Amount scrolled in Creative mode inventory (0 = top, 1 = bottom) */
022        private float currentScroll = 0.0F;
023    
024        /** True if the scrollbar is being dragged */
025        private boolean isScrolling = false;
026    
027        /**
028         * True if the left mouse button was held down last time drawScreen was called.
029         */
030        private boolean wasClicking;
031        private GuiTextField searchField;
032        private List field_74236_u;
033        private Slot field_74235_v = null;
034        private boolean field_74234_w = false;
035        private int tabPage = 0;
036        private int maxPages = 0;
037    
038        public GuiContainerCreative(EntityPlayer par1EntityPlayer)
039        {
040            super(new ContainerCreative(par1EntityPlayer));
041            par1EntityPlayer.craftingInventory = this.inventorySlots;
042            this.allowUserInput = true;
043            par1EntityPlayer.addStat(AchievementList.openInventory, 1);
044            this.ySize = 136;
045            this.xSize = 195;
046        }
047    
048        /**
049         * Called from the main game loop to update the screen.
050         */
051        public void updateScreen()
052        {
053            if (!this.mc.playerController.isInCreativeMode())
054            {
055                this.mc.displayGuiScreen(new GuiInventory(this.mc.thePlayer));
056            }
057        }
058    
059        protected void handleMouseClick(Slot par1Slot, int par2, int par3, boolean par4)
060        {
061            this.field_74234_w = true;
062            ItemStack var6;
063            InventoryPlayer var9;
064    
065            if (par1Slot != null)
066            {
067                int var5;
068    
069                if (par1Slot == this.field_74235_v && par4)
070                {
071                    for (var5 = 0; var5 < this.mc.thePlayer.inventorySlots.getInventory().size(); ++var5)
072                    {
073                        this.mc.playerController.sendSlotPacket((ItemStack)null, var5);
074                    }
075                }
076                else
077                {
078                    ItemStack var7;
079    
080                    if (selectedTabIndex == CreativeTabs.tabInventory.getTabIndex())
081                    {
082                        if (par1Slot == this.field_74235_v)
083                        {
084                            this.mc.thePlayer.inventory.setItemStack((ItemStack)null);
085                        }
086                        else
087                        {
088                            var5 = SlotCreativeInventory.func_75240_a((SlotCreativeInventory)par1Slot).slotNumber;
089                            var6 = this.mc.thePlayer.inventorySlots.getSlot(var5).getStack();
090    
091                            if (par4 && (var6 == null || !(var6.getItem() instanceof ItemArmor)))
092                            {
093                                this.mc.playerController.sendSlotPacket((ItemStack)null, var5);
094                            }
095                            else
096                            {
097                                this.mc.thePlayer.inventorySlots.slotClick(var5, par3, par4, this.mc.thePlayer);
098                                var7 = this.mc.thePlayer.inventorySlots.getSlot(var5).getStack();
099                                this.mc.playerController.sendSlotPacket(var7, var5);
100                            }
101                        }
102                    }
103                    else if (par1Slot.inventory == inventory)
104                    {
105                        var9 = this.mc.thePlayer.inventory;
106                        var6 = var9.getItemStack();
107                        var7 = par1Slot.getStack();
108    
109                        if (var6 != null && var7 != null && var6.isItemEqual(var7))
110                        {
111                            if (par3 == 0)
112                            {
113                                if (par4)
114                                {
115                                    var6.stackSize = var6.getMaxStackSize();
116                                }
117                                else if (var6.stackSize < var6.getMaxStackSize())
118                                {
119                                    ++var6.stackSize;
120                                }
121                            }
122                            else if (var6.stackSize <= 1)
123                            {
124                                var9.setItemStack((ItemStack)null);
125                            }
126                            else
127                            {
128                                --var6.stackSize;
129                            }
130                        }
131                        else if (var7 != null && var6 == null)
132                        {
133                            boolean var8 = false;
134    
135                            if (!var8)
136                            {
137                                var9.setItemStack(ItemStack.copyItemStack(var7));
138                                var6 = var9.getItemStack();
139    
140                                if (par4)
141                                {
142                                    var6.stackSize = var6.getMaxStackSize();
143                                }
144                            }
145                        }
146                        else
147                        {
148                            var9.setItemStack((ItemStack)null);
149                        }
150                    }
151                    else
152                    {
153                        this.inventorySlots.slotClick(par1Slot.slotNumber, par3, par4, this.mc.thePlayer);
154                        ItemStack var10 = this.inventorySlots.getSlot(par1Slot.slotNumber).getStack();
155                        this.mc.playerController.sendSlotPacket(var10, par1Slot.slotNumber - this.inventorySlots.inventorySlots.size() + 9 + 36);
156                    }
157                }
158            }
159            else
160            {
161                var9 = this.mc.thePlayer.inventory;
162    
163                if (var9.getItemStack() != null)
164                {
165                    if (par3 == 0)
166                    {
167                        this.mc.thePlayer.dropPlayerItem(var9.getItemStack());
168                        this.mc.playerController.func_78752_a(var9.getItemStack());
169                        var9.setItemStack((ItemStack)null);
170                    }
171    
172                    if (par3 == 1)
173                    {
174                        var6 = var9.getItemStack().splitStack(1);
175                        this.mc.thePlayer.dropPlayerItem(var6);
176                        this.mc.playerController.func_78752_a(var6);
177    
178                        if (var9.getItemStack().stackSize == 0)
179                        {
180                            var9.setItemStack((ItemStack)null);
181                        }
182                    }
183                }
184            }
185        }
186    
187        /**
188         * Adds the buttons (and other controls) to the screen in question.
189         */
190        public void initGui()
191        {
192            if (this.mc.playerController.isInCreativeMode())
193            {
194                super.initGui();
195                this.controlList.clear();
196                Keyboard.enableRepeatEvents(true);
197                this.searchField = new GuiTextField(this.fontRenderer, this.guiLeft + 82, this.guiTop + 6, 89, this.fontRenderer.FONT_HEIGHT);
198                this.searchField.setMaxStringLength(15);
199                this.searchField.setEnableBackgroundDrawing(false);
200                this.searchField.setVisible(false);
201                this.searchField.setTextColor(16777215);
202                int var1 = selectedTabIndex;
203                selectedTabIndex = -1;
204                this.func_74227_b(CreativeTabs.creativeTabArray[var1]);
205                int tabCount = CreativeTabs.creativeTabArray.length;
206                if (tabCount > 12)
207                {
208                    controlList.add(new GuiButton(101, guiLeft,              guiTop - 50, 20, 20, "<"));
209                    controlList.add(new GuiButton(102, guiLeft + xSize - 20, guiTop - 50, 20, 20, ">"));
210                    tabPage = 0;
211                    maxPages = ((tabCount - 12) / 10) + 1;
212                }
213            }
214            else
215            {
216                this.mc.displayGuiScreen(new GuiInventory(this.mc.thePlayer));
217            }
218        }
219    
220        /**
221         * Called when the screen is unloaded. Used to disable keyboard repeat events
222         */
223        public void onGuiClosed()
224        {
225            super.onGuiClosed();
226            Keyboard.enableRepeatEvents(false);
227        }
228    
229        /**
230         * Fired when a key is typed. This is the equivalent of KeyListener.keyTyped(KeyEvent e).
231         */
232        protected void keyTyped(char par1, int par2)
233        {
234            if (selectedTabIndex != CreativeTabs.tabAllSearch.getTabIndex())
235            {
236                if (Keyboard.isKeyDown(this.mc.gameSettings.keyBindChat.keyCode))
237                {
238                    this.func_74227_b(CreativeTabs.tabAllSearch);
239                }
240                else
241                {
242                    super.keyTyped(par1, par2);
243                }
244            }
245            else
246            {
247                if (this.field_74234_w)
248                {
249                    this.field_74234_w = false;
250                    this.searchField.setText("");
251                }
252    
253                if (this.searchField.textboxKeyTyped(par1, par2))
254                {
255                    this.func_74228_j();
256                }
257                else
258                {
259                    super.keyTyped(par1, par2);
260                }
261            }
262        }
263    
264        private void func_74228_j()
265        {
266            ContainerCreative var1 = (ContainerCreative)this.inventorySlots;
267            var1.itemList.clear();
268            Item[] var2 = Item.itemsList;
269            int var3 = var2.length;
270    
271            for (int var4 = 0; var4 < var3; ++var4)
272            {
273                Item var5 = var2[var4];
274    
275                if (var5 != null && var5.getCreativeTab() != null)
276                {
277                    var5.getSubItems(var5.shiftedIndex, (CreativeTabs)null, var1.itemList);
278                }
279            }
280    
281            Iterator var8 = var1.itemList.iterator();
282            String var9 = this.searchField.getText().toLowerCase();
283    
284            while (var8.hasNext())
285            {
286                ItemStack var10 = (ItemStack)var8.next();
287                boolean var11 = false;
288                Iterator var6 = var10.getItemNameandInformation().iterator();
289    
290                while (true)
291                {
292                    if (var6.hasNext())
293                    {
294                        String var7 = (String)var6.next();
295    
296                        if (!var7.toLowerCase().contains(var9))
297                        {
298                            continue;
299                        }
300    
301                        var11 = true;
302                    }
303    
304                    if (!var11)
305                    {
306                        var8.remove();
307                    }
308    
309                    break;
310                }
311            }
312    
313            this.currentScroll = 0.0F;
314            var1.scrollTo(0.0F);
315        }
316    
317        /**
318         * Draw the foreground layer for the GuiContainer (everything in front of the items)
319         */
320        protected void drawGuiContainerForegroundLayer()
321        {
322            CreativeTabs var1 = CreativeTabs.creativeTabArray[selectedTabIndex];
323    
324            if (var1 != null && var1.drawInForegroundOfTab())
325            {
326                this.fontRenderer.drawString(var1.getTranslatedTabLabel(), 8, 6, 4210752);
327            }
328        }
329    
330        /**
331         * Called when the mouse is clicked.
332         */
333        protected void mouseClicked(int par1, int par2, int par3)
334        {
335            if (par3 == 0)
336            {
337                int var4 = par1 - this.guiLeft;
338                int var5 = par2 - this.guiTop;
339                CreativeTabs[] var6 = CreativeTabs.creativeTabArray;
340                int var7 = var6.length;
341    
342                for (int var8 = 0; var8 < var7; ++var8)
343                {
344                    CreativeTabs var9 = var6[var8];
345    
346                    if (var9 != null && func_74232_a(var9, var4, var5))
347                    {
348                        this.func_74227_b(var9);
349                        return;
350                    }
351                }
352            }
353    
354            super.mouseClicked(par1, par2, par3);
355        }
356    
357        /**
358         * returns (if you are not on the inventoryTab) and (the flag isn't set) and( you have more than 1 page of items)
359         */
360        private boolean needsScrollBars()
361        {
362            if (CreativeTabs.creativeTabArray[selectedTabIndex] == null) return false;
363            return selectedTabIndex != CreativeTabs.tabInventory.getTabIndex() && CreativeTabs.creativeTabArray[selectedTabIndex].shouldHidePlayerInventory() && ((ContainerCreative)this.inventorySlots).hasMoreThan1PageOfItemsInList();
364        }
365    
366        private void func_74227_b(CreativeTabs par1CreativeTabs)
367        {
368            if (par1CreativeTabs == null)
369            {
370                return;
371            }
372    
373            int var2 = selectedTabIndex;
374            selectedTabIndex = par1CreativeTabs.getTabIndex();
375            ContainerCreative var3 = (ContainerCreative)this.inventorySlots;
376            var3.itemList.clear();
377            par1CreativeTabs.displayAllReleventItems(var3.itemList);
378    
379            if (par1CreativeTabs == CreativeTabs.tabInventory)
380            {
381                Container var4 = this.mc.thePlayer.inventorySlots;
382    
383                if (this.field_74236_u == null)
384                {
385                    this.field_74236_u = var3.inventorySlots;
386                }
387    
388                var3.inventorySlots = new ArrayList();
389    
390                for (int var5 = 0; var5 < var4.inventorySlots.size(); ++var5)
391                {
392                    SlotCreativeInventory var6 = new SlotCreativeInventory(this, (Slot)var4.inventorySlots.get(var5), var5);
393                    var3.inventorySlots.add(var6);
394                    int var7;
395                    int var8;
396                    int var9;
397    
398                    if (var5 >= 5 && var5 < 9)
399                    {
400                        var7 = var5 - 5;
401                        var8 = var7 / 2;
402                        var9 = var7 % 2;
403                        var6.xDisplayPosition = 9 + var8 * 54;
404                        var6.yDisplayPosition = 6 + var9 * 27;
405                    }
406                    else if (var5 >= 0 && var5 < 5)
407                    {
408                        var6.yDisplayPosition = -2000;
409                        var6.xDisplayPosition = -2000;
410                    }
411                    else if (var5 < var4.inventorySlots.size())
412                    {
413                        var7 = var5 - 9;
414                        var8 = var7 % 9;
415                        var9 = var7 / 9;
416                        var6.xDisplayPosition = 9 + var8 * 18;
417    
418                        if (var5 >= 36)
419                        {
420                            var6.yDisplayPosition = 112;
421                        }
422                        else
423                        {
424                            var6.yDisplayPosition = 54 + var9 * 18;
425                        }
426                    }
427                }
428    
429                this.field_74235_v = new Slot(inventory, 0, 173, 112);
430                var3.inventorySlots.add(this.field_74235_v);
431            }
432            else if (var2 == CreativeTabs.tabInventory.getTabIndex())
433            {
434                var3.inventorySlots = this.field_74236_u;
435                this.field_74236_u = null;
436            }
437    
438            if (this.searchField != null)
439            {
440                if (par1CreativeTabs == CreativeTabs.tabAllSearch)
441                {
442                    this.searchField.setVisible(true);
443                    this.searchField.setCanLoseFocus(false);
444                    this.searchField.setFocused(true);
445                    this.searchField.setText("");
446                    this.func_74228_j();
447                }
448                else
449                {
450                    this.searchField.setVisible(false);
451                    this.searchField.setCanLoseFocus(true);
452                    this.searchField.setFocused(false);
453                }
454            }
455    
456            this.currentScroll = 0.0F;
457            var3.scrollTo(0.0F);
458        }
459    
460        /**
461         * Handles mouse input.
462         */
463        public void handleMouseInput()
464        {
465            super.handleMouseInput();
466            int var1 = Mouse.getEventDWheel();
467    
468            if (var1 != 0 && this.needsScrollBars())
469            {
470                int var2 = ((ContainerCreative)this.inventorySlots).itemList.size() / 9 - 5 + 1;
471    
472                if (var1 > 0)
473                {
474                    var1 = 1;
475                }
476    
477                if (var1 < 0)
478                {
479                    var1 = -1;
480                }
481    
482                this.currentScroll = (float)((double)this.currentScroll - (double)var1 / (double)var2);
483    
484                if (this.currentScroll < 0.0F)
485                {
486                    this.currentScroll = 0.0F;
487                }
488    
489                if (this.currentScroll > 1.0F)
490                {
491                    this.currentScroll = 1.0F;
492                }
493    
494                ((ContainerCreative)this.inventorySlots).scrollTo(this.currentScroll);
495            }
496        }
497    
498        /**
499         * Draws the screen and all the components in it.
500         */
501        public void drawScreen(int par1, int par2, float par3)
502        {
503            boolean var4 = Mouse.isButtonDown(0);
504            int var5 = this.guiLeft;
505            int var6 = this.guiTop;
506            int var7 = var5 + 175;
507            int var8 = var6 + 18;
508            int var9 = var7 + 14;
509            int var10 = var8 + 112;
510    
511            if (!this.wasClicking && var4 && par1 >= var7 && par2 >= var8 && par1 < var9 && par2 < var10)
512            {
513                this.isScrolling = this.needsScrollBars();
514            }
515    
516            if (!var4)
517            {
518                this.isScrolling = false;
519            }
520    
521            this.wasClicking = var4;
522    
523            if (this.isScrolling)
524            {
525                this.currentScroll = ((float)(par2 - var8) - 7.5F) / ((float)(var10 - var8) - 15.0F);
526    
527                if (this.currentScroll < 0.0F)
528                {
529                    this.currentScroll = 0.0F;
530                }
531    
532                if (this.currentScroll > 1.0F)
533                {
534                    this.currentScroll = 1.0F;
535                }
536    
537                ((ContainerCreative)this.inventorySlots).scrollTo(this.currentScroll);
538            }
539    
540            super.drawScreen(par1, par2, par3);
541            CreativeTabs[] var11 = CreativeTabs.creativeTabArray;
542            int start = tabPage * 10;
543            int var12 = Math.min(var11.length, ((tabPage + 1) * 10) + 2);
544            if (tabPage != 0) start += 2;
545            boolean rendered = false;
546    
547            for (int var13 = start; var13 < var12; ++var13)
548            {
549                CreativeTabs var14 = var11[var13];
550    
551                if (var14 != null && renderCreativeInventoryHoveringText(var14, par1, par2))
552                {
553                    rendered = true;
554                    break;
555                }
556            }
557    
558            if (!rendered && !renderCreativeInventoryHoveringText(CreativeTabs.tabAllSearch, par1, par2))
559            {
560                renderCreativeInventoryHoveringText(CreativeTabs.tabInventory, par1, par2);
561            }
562    
563            if (this.field_74235_v != null && selectedTabIndex == CreativeTabs.tabInventory.getTabIndex() && this.func_74188_c(this.field_74235_v.xDisplayPosition, this.field_74235_v.yDisplayPosition, 16, 16, par1, par2))
564            {
565                this.drawCreativeTabHoveringText(StringTranslate.getInstance().translateKey("inventory.binSlot"), par1, par2);
566            }
567    
568            if (maxPages != 0)
569            {
570                String page = String.format("%d / %d", tabPage + 1, maxPages + 1);
571                int width = fontRenderer.getStringWidth(page);
572                GL11.glDisable(GL11.GL_LIGHTING);
573                this.zLevel = 300.0F;
574                itemRenderer.zLevel = 300.0F;
575                fontRenderer.drawString(page, guiLeft + (xSize / 2) - (width / 2), guiTop - 44, -1);
576                this.zLevel = 0.0F;
577                itemRenderer.zLevel = 0.0F;
578            }
579    
580            GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
581            GL11.glDisable(GL11.GL_LIGHTING);
582        }
583    
584        /**
585         * Draw the background layer for the GuiContainer (everything behind the items)
586         */
587        protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3)
588        {
589            GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
590            RenderHelper.enableGUIStandardItemLighting();
591            int var4 = this.mc.renderEngine.getTexture("/gui/allitems.png");
592            CreativeTabs var5 = CreativeTabs.creativeTabArray[selectedTabIndex];
593            int var6 = this.mc.renderEngine.getTexture("/gui/creative_inv/" + var5.getBackgroundImageName());
594            CreativeTabs[] var7 = CreativeTabs.creativeTabArray;
595            int var8 = var7.length;
596            int var9;
597    
598            int start = tabPage * 10;
599            var8 = Math.min(var7.length, ((tabPage + 1) * 10 + 2));
600            if (tabPage != 0) start += 2;
601    
602            for (var9 = start; var9 < var8; ++var9)
603            {
604                CreativeTabs var10 = var7[var9];
605                this.mc.renderEngine.bindTexture(var4);
606    
607                if (var10 != null && var10.getTabIndex() != selectedTabIndex)
608                {
609                    this.renderCreativeTab(var10);
610                }
611            }
612    
613            if (tabPage != 0)
614            {
615                if (var5 != CreativeTabs.tabAllSearch)
616                {
617                    mc.renderEngine.bindTexture(var4);
618                    renderCreativeTab(CreativeTabs.tabAllSearch);
619                }
620                if (var5 != CreativeTabs.tabInventory)
621                {
622                    mc.renderEngine.bindTexture(var4);
623                    renderCreativeTab(CreativeTabs.tabInventory);
624                }
625            }
626    
627            this.mc.renderEngine.bindTexture(var6);
628            this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, this.xSize, this.ySize);
629            this.searchField.drawTextBox();
630            GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
631            int var11 = this.guiLeft + 175;
632            var8 = this.guiTop + 18;
633            var9 = var8 + 112;
634            this.mc.renderEngine.bindTexture(var4);
635    
636            if (var5 == null || var5.getTabPage() != tabPage)
637            {
638                if (var5 != CreativeTabs.tabAllSearch && var5 != CreativeTabs.tabInventory)
639                {
640                    return;
641                }
642            }
643    
644            if (var5.shouldHidePlayerInventory())
645            {
646                this.drawTexturedModalRect(var11, var8 + (int)((float)(var9 - var8 - 17) * this.currentScroll), 232 + (this.needsScrollBars() ? 0 : 12), 0, 12, 15);
647            }
648    
649            this.renderCreativeTab(var5);
650    
651            if (var5 == CreativeTabs.tabInventory)
652            {
653                GuiInventory.func_74223_a(this.mc, this.guiLeft + 43, this.guiTop + 45, 20, (float)(this.guiLeft + 43 - par2), (float)(this.guiTop + 45 - 30 - par3));
654            }
655        }
656    
657        protected boolean func_74232_a(CreativeTabs par1CreativeTabs, int par2, int par3)
658        {
659            if (par1CreativeTabs.getTabPage() != tabPage)
660            {
661                if (par1CreativeTabs != CreativeTabs.tabAllSearch &&
662                    par1CreativeTabs != CreativeTabs.tabInventory)
663                {
664                    return false;
665                }
666            }
667    
668            int var4 = par1CreativeTabs.getTabColumn();
669            int var5 = 28 * var4;
670            byte var6 = 0;
671    
672            if (var4 == 5)
673            {
674                var5 = this.xSize - 28 + 2;
675            }
676            else if (var4 > 0)
677            {
678                var5 += var4;
679            }
680    
681            int var7;
682    
683            if (par1CreativeTabs.isTabInFirstRow())
684            {
685                var7 = var6 - 32;
686            }
687            else
688            {
689                var7 = var6 + this.ySize;
690            }
691    
692            return par2 >= var5 && par2 <= var5 + 28 && par3 >= var7 && par3 <= var7 + 32;
693        }
694    
695        /**
696         * Renders the creative inventory hovering text if mouse is over it. Returns true if did render or false otherwise.
697         * Params: current creative tab to be checked, current mouse x position, current mouse y position.
698         */
699        protected boolean renderCreativeInventoryHoveringText(CreativeTabs par1CreativeTabs, int par2, int par3)
700        {
701            int var4 = par1CreativeTabs.getTabColumn();
702            int var5 = 28 * var4;
703            byte var6 = 0;
704    
705            if (var4 == 5)
706            {
707                var5 = this.xSize - 28 + 2;
708            }
709            else if (var4 > 0)
710            {
711                var5 += var4;
712            }
713    
714            int var7;
715    
716            if (par1CreativeTabs.isTabInFirstRow())
717            {
718                var7 = var6 - 32;
719            }
720            else
721            {
722                var7 = var6 + this.ySize;
723            }
724    
725            if (this.func_74188_c(var5 + 3, var7 + 3, 23, 27, par2, par3))
726            {
727                this.drawCreativeTabHoveringText(par1CreativeTabs.getTranslatedTabLabel(), par2, par3);
728                return true;
729            }
730            else
731            {
732                return false;
733            }
734        }
735    
736        /**
737         * Renders passed creative inventory tab into the screen.
738         */
739        protected void renderCreativeTab(CreativeTabs par1CreativeTabs)
740        {
741            boolean var2 = par1CreativeTabs.getTabIndex() == selectedTabIndex;
742            boolean var3 = par1CreativeTabs.isTabInFirstRow();
743            int var4 = par1CreativeTabs.getTabColumn();
744            int var5 = var4 * 28;
745            int var6 = 0;
746            int var7 = this.guiLeft + 28 * var4;
747            int var8 = this.guiTop;
748            byte var9 = 32;
749    
750            if (var2)
751            {
752                var6 += 32;
753            }
754    
755            if (var4 == 5)
756            {
757                var7 = this.guiLeft + this.xSize - 28;
758            }
759            else if (var4 > 0)
760            {
761                var7 += var4;
762            }
763    
764            if (var3)
765            {
766                var8 -= 28;
767            }
768            else
769            {
770                var6 += 64;
771                var8 += this.ySize - 4;
772            }
773    
774            GL11.glDisable(GL11.GL_LIGHTING);
775            this.drawTexturedModalRect(var7, var8, var5, var6, 28, var9);
776            this.zLevel = 100.0F;
777            itemRenderer.zLevel = 100.0F;
778            var7 += 6;
779            var8 += 8 + (var3 ? 1 : -1);
780            GL11.glEnable(GL11.GL_LIGHTING);
781            GL11.glEnable(GL12.GL_RESCALE_NORMAL);
782            ItemStack var10 = par1CreativeTabs.getIconItemStack();
783            itemRenderer.renderItemIntoGUI(this.fontRenderer, this.mc.renderEngine, var10, var7, var8);
784            itemRenderer.renderItemOverlayIntoGUI(this.fontRenderer, this.mc.renderEngine, var10, var7, var8);
785            GL11.glDisable(GL11.GL_LIGHTING);
786            itemRenderer.zLevel = 0.0F;
787            this.zLevel = 0.0F;
788        }
789    
790        /**
791         * Fired when a control is clicked. This is the equivalent of ActionListener.actionPerformed(ActionEvent e).
792         */
793        protected void actionPerformed(GuiButton par1GuiButton)
794        {
795            if (par1GuiButton.id == 0)
796            {
797                this.mc.displayGuiScreen(new GuiAchievements(this.mc.statFileWriter));
798            }
799    
800            if (par1GuiButton.id == 1)
801            {
802                this.mc.displayGuiScreen(new GuiStats(this, this.mc.statFileWriter));
803            }
804    
805            if (par1GuiButton.id == 101)
806            {
807                tabPage = Math.max(tabPage - 1, 0);
808            }
809            else if (par1GuiButton.id == 102)
810            {
811                tabPage = Math.min(tabPage + 1, maxPages);
812            }
813        }
814    
815        public int func_74230_h()
816        {
817            return selectedTabIndex;
818        }
819    
820        /**
821         * Returns the creative inventory
822         */
823        static InventoryBasic getInventory()
824        {
825            return inventory;
826        }
827    }