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.List;
006 import net.minecraft.client.Minecraft;
007 import net.minecraft.client.gui.GuiScreen;
008 import net.minecraft.client.renderer.OpenGlHelper;
009 import net.minecraft.client.renderer.RenderHelper;
010 import net.minecraft.client.renderer.entity.RenderItem;
011 import net.minecraft.entity.player.InventoryPlayer;
012 import net.minecraft.inventory.Container;
013 import net.minecraft.inventory.Slot;
014 import net.minecraft.item.ItemStack;
015 import net.minecraft.util.MathHelper;
016 import org.lwjgl.input.Keyboard;
017 import org.lwjgl.opengl.GL11;
018 import org.lwjgl.opengl.GL12;
019
020 @SideOnly(Side.CLIENT)
021 public abstract class GuiContainer extends GuiScreen
022 {
023 /** Stacks renderer. Icons, stack size, health, etc... */
024 protected static RenderItem itemRenderer = new RenderItem();
025
026 /** The X size of the inventory window in pixels. */
027 protected int xSize = 176;
028
029 /** The Y size of the inventory window in pixels. */
030 protected int ySize = 166;
031
032 /** A list of the players inventory slots. */
033 public Container inventorySlots;
034
035 /**
036 * Starting X position for the Gui. Inconsistent use for Gui backgrounds.
037 */
038 protected int guiLeft;
039
040 /**
041 * Starting Y position for the Gui. Inconsistent use for Gui backgrounds.
042 */
043 protected int guiTop;
044 private Slot theSlot;
045
046 /** Used when touchscreen is enabled */
047 private Slot clickedSlot = null;
048
049 /** Used when touchscreen is enabled */
050 private boolean isRightMouseClick = false;
051
052 /** Used when touchscreen is enabled */
053 private ItemStack draggedStack = null;
054 private int field_85049_r = 0;
055 private int field_85048_s = 0;
056 private Slot returningStackDestSlot = null;
057 private long returningStackTime = 0L;
058
059 /** Used when touchscreen is enabled */
060 private ItemStack returningStack = null;
061 private Slot field_92033_y = null;
062 private long field_92032_z = 0L;
063
064 public GuiContainer(Container par1Container)
065 {
066 this.inventorySlots = par1Container;
067 }
068
069 /**
070 * Adds the buttons (and other controls) to the screen in question.
071 */
072 public void initGui()
073 {
074 super.initGui();
075 this.mc.thePlayer.openContainer = this.inventorySlots;
076 this.guiLeft = (this.width - this.xSize) / 2;
077 this.guiTop = (this.height - this.ySize) / 2;
078 }
079
080 /**
081 * Draws the screen and all the components in it.
082 */
083 public void drawScreen(int par1, int par2, float par3)
084 {
085 this.drawDefaultBackground();
086 int var4 = this.guiLeft;
087 int var5 = this.guiTop;
088 this.drawGuiContainerBackgroundLayer(par3, par1, par2);
089 GL11.glDisable(GL12.GL_RESCALE_NORMAL);
090 RenderHelper.disableStandardItemLighting();
091 GL11.glDisable(GL11.GL_LIGHTING);
092 GL11.glDisable(GL11.GL_DEPTH_TEST);
093 super.drawScreen(par1, par2, par3);
094 RenderHelper.enableGUIStandardItemLighting();
095 GL11.glPushMatrix();
096 GL11.glTranslatef((float)var4, (float)var5, 0.0F);
097 GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
098 GL11.glEnable(GL12.GL_RESCALE_NORMAL);
099 this.theSlot = null;
100 short var6 = 240;
101 short var7 = 240;
102 OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float)var6 / 1.0F, (float)var7 / 1.0F);
103 GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
104 int var9;
105
106 for (int var13 = 0; var13 < this.inventorySlots.inventorySlots.size(); ++var13)
107 {
108 Slot var14 = (Slot)this.inventorySlots.inventorySlots.get(var13);
109 this.drawSlotInventory(var14);
110
111 if (this.isMouseOverSlot(var14, par1, par2))
112 {
113 this.theSlot = var14;
114 GL11.glDisable(GL11.GL_LIGHTING);
115 GL11.glDisable(GL11.GL_DEPTH_TEST);
116 int var8 = var14.xDisplayPosition;
117 var9 = var14.yDisplayPosition;
118 this.drawGradientRect(var8, var9, var8 + 16, var9 + 16, -2130706433, -2130706433);
119 GL11.glEnable(GL11.GL_LIGHTING);
120 GL11.glEnable(GL11.GL_DEPTH_TEST);
121 }
122 }
123
124 this.drawGuiContainerForegroundLayer(par1, par2);
125 InventoryPlayer var15 = this.mc.thePlayer.inventory;
126 ItemStack var16 = this.draggedStack == null ? var15.getItemStack() : this.draggedStack;
127
128 if (var16 != null)
129 {
130 byte var18 = 8;
131 var9 = this.draggedStack == null ? 8 : 16;
132
133 if (this.draggedStack != null && this.isRightMouseClick)
134 {
135 var16 = var16.copy();
136 var16.stackSize = MathHelper.ceiling_float_int((float)var16.stackSize / 2.0F);
137 }
138
139 this.drawItemStack(var16, par1 - var4 - var18, par2 - var5 - var9);
140 }
141
142 if (this.returningStack != null)
143 {
144 float var17 = (float)(Minecraft.getSystemTime() - this.returningStackTime) / 100.0F;
145
146 if (var17 >= 1.0F)
147 {
148 var17 = 1.0F;
149 this.returningStack = null;
150 }
151
152 var9 = this.returningStackDestSlot.xDisplayPosition - this.field_85049_r;
153 int var10 = this.returningStackDestSlot.yDisplayPosition - this.field_85048_s;
154 int var11 = this.field_85049_r + (int)((float)var9 * var17);
155 int var12 = this.field_85048_s + (int)((float)var10 * var17);
156 this.drawItemStack(this.returningStack, var11, var12);
157 }
158
159 if (var15.getItemStack() == null && this.theSlot != null && this.theSlot.getHasStack())
160 {
161 ItemStack var19 = this.theSlot.getStack();
162 this.drawItemStackTooltip(var19, par1 - var4 + 8, par2 - var5 + 8);
163 }
164
165 GL11.glPopMatrix();
166 GL11.glEnable(GL11.GL_LIGHTING);
167 GL11.glEnable(GL11.GL_DEPTH_TEST);
168 RenderHelper.enableStandardItemLighting();
169 }
170
171 private void drawItemStack(ItemStack par1ItemStack, int par2, int par3)
172 {
173 GL11.glTranslatef(0.0F, 0.0F, 32.0F);
174 this.zLevel = 200.0F;
175 itemRenderer.zLevel = 200.0F;
176 itemRenderer.renderItemAndEffectIntoGUI(this.fontRenderer, this.mc.renderEngine, par1ItemStack, par2, par3);
177 itemRenderer.renderItemOverlayIntoGUI(this.fontRenderer, this.mc.renderEngine, par1ItemStack, par2, par3 - (this.draggedStack == null ? 0 : 8));
178 this.zLevel = 0.0F;
179 itemRenderer.zLevel = 0.0F;
180 }
181
182 protected void drawItemStackTooltip(ItemStack par1ItemStack, int par2, int par3)
183 {
184 GL11.glDisable(GL12.GL_RESCALE_NORMAL);
185 RenderHelper.disableStandardItemLighting();
186 GL11.glDisable(GL11.GL_LIGHTING);
187 GL11.glDisable(GL11.GL_DEPTH_TEST);
188 List var4 = par1ItemStack.getTooltip(this.mc.thePlayer, this.mc.gameSettings.advancedItemTooltips);
189
190 if (!var4.isEmpty())
191 {
192 int var5 = 0;
193 int var6;
194 int var7;
195
196 for (var6 = 0; var6 < var4.size(); ++var6)
197 {
198 var7 = this.fontRenderer.getStringWidth((String)var4.get(var6));
199
200 if (var7 > var5)
201 {
202 var5 = var7;
203 }
204 }
205
206 var6 = par2 + 12;
207 var7 = par3 - 12;
208 int var9 = 8;
209
210 if (var4.size() > 1)
211 {
212 var9 += 2 + (var4.size() - 1) * 10;
213 }
214
215 if (this.guiTop + var7 + var9 + 6 > this.height)
216 {
217 var7 = this.height - var9 - this.guiTop - 6;
218 }
219
220 this.zLevel = 300.0F;
221 itemRenderer.zLevel = 300.0F;
222 int var10 = -267386864;
223 this.drawGradientRect(var6 - 3, var7 - 4, var6 + var5 + 3, var7 - 3, var10, var10);
224 this.drawGradientRect(var6 - 3, var7 + var9 + 3, var6 + var5 + 3, var7 + var9 + 4, var10, var10);
225 this.drawGradientRect(var6 - 3, var7 - 3, var6 + var5 + 3, var7 + var9 + 3, var10, var10);
226 this.drawGradientRect(var6 - 4, var7 - 3, var6 - 3, var7 + var9 + 3, var10, var10);
227 this.drawGradientRect(var6 + var5 + 3, var7 - 3, var6 + var5 + 4, var7 + var9 + 3, var10, var10);
228 int var11 = 1347420415;
229 int var12 = (var11 & 16711422) >> 1 | var11 & -16777216;
230 this.drawGradientRect(var6 - 3, var7 - 3 + 1, var6 - 3 + 1, var7 + var9 + 3 - 1, var11, var12);
231 this.drawGradientRect(var6 + var5 + 2, var7 - 3 + 1, var6 + var5 + 3, var7 + var9 + 3 - 1, var11, var12);
232 this.drawGradientRect(var6 - 3, var7 - 3, var6 + var5 + 3, var7 - 3 + 1, var11, var11);
233 this.drawGradientRect(var6 - 3, var7 + var9 + 2, var6 + var5 + 3, var7 + var9 + 3, var12, var12);
234
235 for (int var13 = 0; var13 < var4.size(); ++var13)
236 {
237 String var14 = (String)var4.get(var13);
238
239 if (var13 == 0)
240 {
241 var14 = "\u00a7" + Integer.toHexString(par1ItemStack.getRarity().rarityColor) + var14;
242 }
243 else
244 {
245 var14 = "\u00a77" + var14;
246 }
247
248 this.fontRenderer.drawStringWithShadow(var14, var6, var7, -1);
249
250 if (var13 == 0)
251 {
252 var7 += 2;
253 }
254
255 var7 += 10;
256 }
257
258 this.zLevel = 0.0F;
259 itemRenderer.zLevel = 0.0F;
260 }
261 }
262
263 /**
264 * Draws the text when mouse is over creative inventory tab. Params: current creative tab to be checked, current
265 * mouse x position, current mouse y position.
266 */
267 protected void drawCreativeTabHoveringText(String par1Str, int par2, int par3)
268 {
269 GL11.glDisable(GL12.GL_RESCALE_NORMAL);
270 RenderHelper.disableStandardItemLighting();
271 GL11.glDisable(GL11.GL_LIGHTING);
272 GL11.glDisable(GL11.GL_DEPTH_TEST);
273 int var4 = this.fontRenderer.getStringWidth(par1Str);
274 int var5 = par2 + 12;
275 int var6 = par3 - 12;
276 byte var8 = 8;
277 this.zLevel = 300.0F;
278 itemRenderer.zLevel = 300.0F;
279 int var9 = -267386864;
280 this.drawGradientRect(var5 - 3, var6 - 4, var5 + var4 + 3, var6 - 3, var9, var9);
281 this.drawGradientRect(var5 - 3, var6 + var8 + 3, var5 + var4 + 3, var6 + var8 + 4, var9, var9);
282 this.drawGradientRect(var5 - 3, var6 - 3, var5 + var4 + 3, var6 + var8 + 3, var9, var9);
283 this.drawGradientRect(var5 - 4, var6 - 3, var5 - 3, var6 + var8 + 3, var9, var9);
284 this.drawGradientRect(var5 + var4 + 3, var6 - 3, var5 + var4 + 4, var6 + var8 + 3, var9, var9);
285 int var10 = 1347420415;
286 int var11 = (var10 & 16711422) >> 1 | var10 & -16777216;
287 this.drawGradientRect(var5 - 3, var6 - 3 + 1, var5 - 3 + 1, var6 + var8 + 3 - 1, var10, var11);
288 this.drawGradientRect(var5 + var4 + 2, var6 - 3 + 1, var5 + var4 + 3, var6 + var8 + 3 - 1, var10, var11);
289 this.drawGradientRect(var5 - 3, var6 - 3, var5 + var4 + 3, var6 - 3 + 1, var10, var10);
290 this.drawGradientRect(var5 - 3, var6 + var8 + 2, var5 + var4 + 3, var6 + var8 + 3, var11, var11);
291 this.fontRenderer.drawStringWithShadow(par1Str, var5, var6, -1);
292 this.zLevel = 0.0F;
293 itemRenderer.zLevel = 0.0F;
294 GL11.glEnable(GL11.GL_LIGHTING);
295 GL11.glEnable(GL11.GL_DEPTH_TEST);
296 RenderHelper.enableStandardItemLighting();
297 GL11.glEnable(GL12.GL_RESCALE_NORMAL);
298 }
299
300 /**
301 * Draw the foreground layer for the GuiContainer (everything in front of the items)
302 */
303 protected void drawGuiContainerForegroundLayer(int par1, int par2) {}
304
305 /**
306 * Draw the background layer for the GuiContainer (everything behind the items)
307 */
308 protected abstract void drawGuiContainerBackgroundLayer(float var1, int var2, int var3);
309
310 /**
311 * Draws an inventory slot
312 */
313 protected void drawSlotInventory(Slot par1Slot)
314 {
315 int var2 = par1Slot.xDisplayPosition;
316 int var3 = par1Slot.yDisplayPosition;
317 ItemStack var4 = par1Slot.getStack();
318 boolean var5 = par1Slot == this.clickedSlot && this.draggedStack != null && !this.isRightMouseClick;
319
320 if (par1Slot == this.clickedSlot && this.draggedStack != null && this.isRightMouseClick && var4 != null)
321 {
322 var4 = var4.copy();
323 var4.stackSize /= 2;
324 }
325
326 this.zLevel = 100.0F;
327 itemRenderer.zLevel = 100.0F;
328
329 if (var4 == null)
330 {
331 int var6 = par1Slot.getBackgroundIconIndex();
332
333 if (var6 >= 0)
334 {
335 GL11.glDisable(GL11.GL_LIGHTING);
336 this.mc.renderEngine.bindTexture(this.mc.renderEngine.getTexture(par1Slot.getBackgroundIconTexture()));
337 this.drawTexturedModalRect(var2, var3, var6 % 16 * 16, var6 / 16 * 16, 16, 16);
338 GL11.glEnable(GL11.GL_LIGHTING);
339 var5 = true;
340 }
341 }
342
343 if (!var5)
344 {
345 GL11.glEnable(GL11.GL_DEPTH_TEST);
346 itemRenderer.renderItemAndEffectIntoGUI(this.fontRenderer, this.mc.renderEngine, var4, var2, var3);
347 itemRenderer.renderItemOverlayIntoGUI(this.fontRenderer, this.mc.renderEngine, var4, var2, var3);
348 }
349
350 itemRenderer.zLevel = 0.0F;
351 this.zLevel = 0.0F;
352 }
353
354 /**
355 * Returns the slot at the given coordinates or null if there is none.
356 */
357 private Slot getSlotAtPosition(int par1, int par2)
358 {
359 for (int var3 = 0; var3 < this.inventorySlots.inventorySlots.size(); ++var3)
360 {
361 Slot var4 = (Slot)this.inventorySlots.inventorySlots.get(var3);
362
363 if (this.isMouseOverSlot(var4, par1, par2))
364 {
365 return var4;
366 }
367 }
368
369 return null;
370 }
371
372 /**
373 * Called when the mouse is clicked.
374 */
375 protected void mouseClicked(int par1, int par2, int par3)
376 {
377 super.mouseClicked(par1, par2, par3);
378 boolean var4 = par3 == this.mc.gameSettings.keyBindPickBlock.keyCode + 100;
379
380 if (par3 == 0 || par3 == 1 || var4)
381 {
382 Slot var5 = this.getSlotAtPosition(par1, par2);
383 int var6 = this.guiLeft;
384 int var7 = this.guiTop;
385 boolean var8 = par1 < var6 || par2 < var7 || par1 >= var6 + this.xSize || par2 >= var7 + this.ySize;
386 int var9 = -1;
387
388 if (var5 != null)
389 {
390 var9 = var5.slotNumber;
391 }
392
393 if (var8)
394 {
395 var9 = -999;
396 }
397
398 if (this.mc.gameSettings.touchscreen && var8 && this.mc.thePlayer.inventory.getItemStack() == null)
399 {
400 this.mc.displayGuiScreen((GuiScreen)null);
401 return;
402 }
403
404 if (var9 != -1)
405 {
406 if (this.mc.gameSettings.touchscreen)
407 {
408 if (var5 != null && var5.getHasStack())
409 {
410 this.clickedSlot = var5;
411 this.draggedStack = null;
412 this.isRightMouseClick = par3 == 1;
413 }
414 else
415 {
416 this.clickedSlot = null;
417 }
418 }
419 else if (var4)
420 {
421 this.handleMouseClick(var5, var9, par3, 3);
422 }
423 else
424 {
425 boolean var10 = var9 != -999 && (Keyboard.isKeyDown(42) || Keyboard.isKeyDown(54));
426 this.handleMouseClick(var5, var9, par3, var10 ? 1 : 0);
427 }
428 }
429 }
430 }
431
432 protected void func_85041_a(int par1, int par2, int par3, long par4)
433 {
434 if (this.clickedSlot != null && this.mc.gameSettings.touchscreen)
435 {
436 if (par3 == 0 || par3 == 1)
437 {
438 Slot var6 = this.getSlotAtPosition(par1, par2);
439
440 if (this.draggedStack == null)
441 {
442 if (var6 != this.clickedSlot)
443 {
444 this.draggedStack = this.clickedSlot.getStack().copy();
445 }
446 }
447 else if (this.draggedStack.stackSize > 1 && var6 != null && this.func_92031_b(var6))
448 {
449 long var7 = Minecraft.getSystemTime();
450
451 if (this.field_92033_y == var6)
452 {
453 if (var7 - this.field_92032_z > 500L)
454 {
455 this.handleMouseClick(this.clickedSlot, this.clickedSlot.slotNumber, 0, 0);
456 this.handleMouseClick(var6, var6.slotNumber, 1, 0);
457 this.handleMouseClick(this.clickedSlot, this.clickedSlot.slotNumber, 0, 0);
458 this.field_92032_z = var7 + 750L;
459 --this.draggedStack.stackSize;
460 }
461 }
462 else
463 {
464 this.field_92033_y = var6;
465 this.field_92032_z = var7;
466 }
467 }
468 }
469 }
470 }
471
472 /**
473 * Called when the mouse is moved or a mouse button is released. Signature: (mouseX, mouseY, which) which==-1 is
474 * mouseMove, which==0 or which==1 is mouseUp
475 */
476 protected void mouseMovedOrUp(int par1, int par2, int par3)
477 {
478 if (this.clickedSlot != null && this.mc.gameSettings.touchscreen)
479 {
480 if (par3 == 0 || par3 == 1)
481 {
482 Slot var4 = this.getSlotAtPosition(par1, par2);
483 int var5 = this.guiLeft;
484 int var6 = this.guiTop;
485 boolean var7 = par1 < var5 || par2 < var6 || par1 >= var5 + this.xSize || par2 >= var6 + this.ySize;
486 int var8 = -1;
487
488 if (var4 != null)
489 {
490 var8 = var4.slotNumber;
491 }
492
493 if (var7)
494 {
495 var8 = -999;
496 }
497
498 if (this.draggedStack == null && var4 != this.clickedSlot)
499 {
500 this.draggedStack = this.clickedSlot.getStack();
501 }
502
503 boolean var9 = this.func_92031_b(var4);
504
505 if (var8 != -1 && this.draggedStack != null && var9)
506 {
507 this.handleMouseClick(this.clickedSlot, this.clickedSlot.slotNumber, par3, 0);
508 this.handleMouseClick(var4, var8, 0, 0);
509
510 if (this.mc.thePlayer.inventory.getItemStack() != null)
511 {
512 this.handleMouseClick(this.clickedSlot, this.clickedSlot.slotNumber, par3, 0);
513 this.field_85049_r = par1 - var5;
514 this.field_85048_s = par2 - var6;
515 this.returningStackDestSlot = this.clickedSlot;
516 this.returningStack = this.draggedStack;
517 this.returningStackTime = Minecraft.getSystemTime();
518 }
519 else
520 {
521 this.returningStack = null;
522 }
523 }
524 else if (this.draggedStack != null)
525 {
526 this.field_85049_r = par1 - var5;
527 this.field_85048_s = par2 - var6;
528 this.returningStackDestSlot = this.clickedSlot;
529 this.returningStack = this.draggedStack;
530 this.returningStackTime = Minecraft.getSystemTime();
531 }
532
533 this.draggedStack = null;
534 this.clickedSlot = null;
535 }
536 }
537 }
538
539 private boolean func_92031_b(Slot par1Slot)
540 {
541 boolean var2 = par1Slot == null || !par1Slot.getHasStack();
542
543 if (par1Slot != null && par1Slot.getHasStack() && this.draggedStack != null && ItemStack.areItemStackTagsEqual(par1Slot.getStack(), this.draggedStack))
544 {
545 var2 |= par1Slot.getStack().stackSize + this.draggedStack.stackSize <= this.draggedStack.getMaxStackSize();
546 }
547
548 return var2;
549 }
550
551 /**
552 * Returns if the passed mouse position is over the specified slot.
553 */
554 private boolean isMouseOverSlot(Slot par1Slot, int par2, int par3)
555 {
556 return this.isPointInRegion(par1Slot.xDisplayPosition, par1Slot.yDisplayPosition, 16, 16, par2, par3);
557 }
558
559 /**
560 * Args: left, top, width, height, pointX, pointY. Note: left, top are local to Gui, pointX, pointY are local to
561 * screen
562 */
563 protected boolean isPointInRegion(int par1, int par2, int par3, int par4, int par5, int par6)
564 {
565 int var7 = this.guiLeft;
566 int var8 = this.guiTop;
567 par5 -= var7;
568 par6 -= var8;
569 return par5 >= par1 - 1 && par5 < par1 + par3 + 1 && par6 >= par2 - 1 && par6 < par2 + par4 + 1;
570 }
571
572 protected void handleMouseClick(Slot par1Slot, int par2, int par3, int par4)
573 {
574 if (par1Slot != null)
575 {
576 par2 = par1Slot.slotNumber;
577 }
578
579 this.mc.playerController.windowClick(this.inventorySlots.windowId, par2, par3, par4, this.mc.thePlayer);
580 }
581
582 /**
583 * Fired when a key is typed. This is the equivalent of KeyListener.keyTyped(KeyEvent e).
584 */
585 protected void keyTyped(char par1, int par2)
586 {
587 if (par2 == 1 || par2 == this.mc.gameSettings.keyBindInventory.keyCode)
588 {
589 this.mc.thePlayer.closeScreen();
590 }
591
592 this.checkHotbarKeys(par2);
593
594 if (par2 == this.mc.gameSettings.keyBindPickBlock.keyCode && this.theSlot != null && this.theSlot.getHasStack())
595 {
596 this.handleMouseClick(this.theSlot, this.theSlot.slotNumber, this.ySize, 3);
597 }
598 }
599
600 /**
601 * This function is what controls the hotbar shortcut check when you press a number key when hovering a stack.
602 */
603 protected boolean checkHotbarKeys(int par1)
604 {
605 if (this.mc.thePlayer.inventory.getItemStack() == null && this.theSlot != null)
606 {
607 for (int var2 = 0; var2 < 9; ++var2)
608 {
609 if (par1 == 2 + var2)
610 {
611 this.handleMouseClick(this.theSlot, this.theSlot.slotNumber, var2, 2);
612 return true;
613 }
614 }
615 }
616
617 return false;
618 }
619
620 /**
621 * Called when the screen is unloaded. Used to disable keyboard repeat events
622 */
623 public void onGuiClosed()
624 {
625 if (this.mc.thePlayer != null)
626 {
627 this.inventorySlots.onCraftGuiClosed(this.mc.thePlayer);
628 }
629 }
630
631 /**
632 * Returns true if this GUI should pause the game when it is displayed in single-player
633 */
634 public boolean doesGuiPauseGame()
635 {
636 return false;
637 }
638
639 /**
640 * Called from the main game loop to update the screen.
641 */
642 public void updateScreen()
643 {
644 super.updateScreen();
645
646 if (!this.mc.thePlayer.isEntityAlive() || this.mc.thePlayer.isDead)
647 {
648 this.mc.thePlayer.closeScreen();
649 }
650 }
651 }