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