001 package net.minecraft.client.gui.inventory; 002 003 import cpw.mods.fml.relauncher.Side; 004 import cpw.mods.fml.relauncher.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.enchantment.Enchantment; 016 import net.minecraft.entity.player.EntityPlayer; 017 import net.minecraft.entity.player.InventoryPlayer; 018 import net.minecraft.inventory.Container; 019 import net.minecraft.inventory.InventoryBasic; 020 import net.minecraft.inventory.Slot; 021 import net.minecraft.item.Item; 022 import net.minecraft.item.ItemStack; 023 import net.minecraft.stats.AchievementList; 024 import net.minecraft.util.StringTranslate; 025 import org.lwjgl.input.Keyboard; 026 import org.lwjgl.input.Mouse; 027 import org.lwjgl.opengl.GL11; 028 import org.lwjgl.opengl.GL12; 029 030 @SideOnly(Side.CLIENT) 031 public 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.field_92053_bW.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.func_74223_a(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 }