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