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 }