    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) && ItemStack.areItemStackTagsEqual(var7, 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}