Guest User

Untitled

a guest
Sep 26th, 2012
196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 13.86 KB | None | 0 0
  1. package net.minecraft.src;
  2.  
  3. import cpw.mods.fml.common.Side;
  4. import cpw.mods.fml.common.asm.SideOnly;
  5. import java.util.Iterator;
  6. import java.util.List;
  7. import org.lwjgl.input.Keyboard;
  8. import org.lwjgl.opengl.GL11;
  9. import org.lwjgl.opengl.GL12;
  10.  
  11. @SideOnly(Side.CLIENT)
  12. public abstract class GuiContainer extends GuiScreen
  13. {
  14.     /** Stacks renderer. Icons, stack size, health, etc... */
  15.     protected static RenderItem itemRenderer = new RenderItem();
  16.  
  17.     /** The X size of the inventory window in pixels. */
  18.     protected int xSize = 176;
  19.  
  20.     /** The Y size of the inventory window in pixels. */
  21.     protected int ySize = 166;
  22.  
  23.     /** A list of the players inventory slots. */
  24.     public Container inventorySlots;
  25.  
  26.     /**
  27.      * Starting X position for the Gui. Inconsistent use for Gui backgrounds.
  28.      */
  29.     protected int guiLeft;
  30.  
  31.     /**
  32.      * Starting Y position for the Gui. Inconsistent use for Gui backgrounds.
  33.      */
  34.     protected int guiTop;
  35.  
  36.     public GuiContainer(Container par1Container)
  37.     {
  38.         this.inventorySlots = par1Container;
  39.     }
  40.  
  41.     /**
  42.      * Adds the buttons (and other controls) to the screen in question.
  43.      */
  44.     public void initGui()
  45.     {
  46.         super.initGui();
  47.         this.mc.thePlayer.craftingInventory = this.inventorySlots;
  48.         this.guiLeft = (this.width - this.xSize) / 2;
  49.         this.guiTop = (this.height - this.ySize) / 2;
  50.     }
  51.  
  52.     /**
  53.      * Draws the screen and all the components in it.
  54.      */
  55.     public void drawScreen(int par1, int par2, float par3)
  56.     {
  57.         this.drawDefaultBackground();
  58.         int var4 = this.guiLeft;
  59.         int var5 = this.guiTop;
  60.         this.drawGuiContainerBackgroundLayer(par3, par1, par2);
  61.         GL11.glDisable(GL12.GL_RESCALE_NORMAL);
  62.         RenderHelper.disableStandardItemLighting();
  63.         GL11.glDisable(GL11.GL_LIGHTING);
  64.         GL11.glDisable(GL11.GL_DEPTH_TEST);
  65.         super.drawScreen(par1, par2, par3);
  66.         RenderHelper.enableGUIStandardItemLighting();
  67.         GL11.glPushMatrix();
  68.         GL11.glTranslatef((float)var4, (float)var5, 0.0F);
  69.         GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
  70.         GL11.glEnable(GL12.GL_RESCALE_NORMAL);
  71.         Slot var6 = null;
  72.         short var7 = 240;
  73.         short var8 = 240;
  74.         OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float)var7 / 1.0F, (float)var8 / 1.0F);
  75.         GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
  76.  
  77.         for (int var11 = 0; var11 < this.inventorySlots.inventorySlots.size(); ++var11)
  78.         {
  79.             Slot var14 = (Slot)this.inventorySlots.inventorySlots.get(var11);
  80.             this.drawSlotInventory(var14);
  81.  
  82.             if (this.isMouseOverSlot(var14, par1, par2))
  83.             {
  84.                 var6 = var14;
  85.                 GL11.glDisable(GL11.GL_LIGHTING);
  86.                 GL11.glDisable(GL11.GL_DEPTH_TEST);
  87.                 int var9 = var14.xDisplayPosition;
  88.                 int var10 = var14.yDisplayPosition;
  89.                 this.drawGradientRect(var9, var10, var9 + 16, var10 + 16, -2130706433, -2130706433);
  90.                 GL11.glEnable(GL11.GL_LIGHTING);
  91.                 GL11.glEnable(GL11.GL_DEPTH_TEST);
  92.             }
  93.         }
  94.  
  95.         this.drawGuiContainerForegroundLayer();
  96.         InventoryPlayer var12 = this.mc.thePlayer.inventory;
  97.  
  98.         if (var12.getItemStack() != null)
  99.         {
  100.             GL11.glTranslatef(0.0F, 0.0F, 32.0F);
  101.             this.zLevel = 200.0F;
  102.             itemRenderer.zLevel = 200.0F;
  103.             itemRenderer.renderItemIntoGUI(this.fontRenderer, this.mc.renderEngine, var12.getItemStack(), par1 - var4 - 8, par2 - var5 - 8);
  104.             itemRenderer.renderItemOverlayIntoGUI(this.fontRenderer, this.mc.renderEngine, var12.getItemStack(), par1 - var4 - 8, par2 - var5 - 8);
  105.             this.zLevel = 0.0F;
  106.             itemRenderer.zLevel = 0.0F;
  107.         }
  108.  
  109.         if (var12.getItemStack() == null && var6 != null && var6.getHasStack())
  110.         {
  111.             ItemStack var13 = var6.getStack();
  112.             this.func_74184_a(var13, par1 - var4, par2 - var5);
  113.         }
  114.  
  115.         GL11.glPopMatrix();
  116.         GL11.glEnable(GL11.GL_LIGHTING);
  117.         GL11.glEnable(GL11.GL_DEPTH_TEST);
  118.         RenderHelper.enableStandardItemLighting();
  119.     }
  120.  
  121.     protected void func_74184_a(ItemStack par1ItemStack, int par2, int par3)
  122.     {
  123.         GL11.glDisable(GL12.GL_RESCALE_NORMAL);
  124.         RenderHelper.disableStandardItemLighting();
  125.         GL11.glDisable(GL11.GL_LIGHTING);
  126.         GL11.glDisable(GL11.GL_DEPTH_TEST);
  127.         List var4 = par1ItemStack.getItemNameandInformation();
  128.     /**
  129.     *
  130.     *
  131.     * Insert this line into GuiContainer
  132.     *
  133.     *
  134.     **/
  135.         (whatever you name your package).InformationAPI.addInfo(par1ItemStack, par1ItemStack.getItem(), var4);
  136.  
  137.         if (!var4.isEmpty())
  138.         {
  139.             int var5 = 0;
  140.             Iterator var6 = var4.iterator();
  141.  
  142.             while (var6.hasNext())
  143.             {
  144.                 String var7 = (String)var6.next();
  145.                 int var8 = this.fontRenderer.getStringWidth(var7);
  146.  
  147.                 if (var8 > var5)
  148.                 {
  149.                     var5 = var8;
  150.                 }
  151.             }
  152.  
  153.             int var15 = par2 + 12;
  154.             int var16 = par3 - 12;
  155.             int var9 = 8;
  156.  
  157.             if (var4.size() > 1)
  158.             {
  159.                 var9 += 2 + (var4.size() - 1) * 10;
  160.             }
  161.  
  162.             this.zLevel = 300.0F;
  163.             itemRenderer.zLevel = 300.0F;
  164.             int var10 = -267386864;
  165.             this.drawGradientRect(var15 - 3, var16 - 4, var15 + var5 + 3, var16 - 3, var10, var10);
  166.             this.drawGradientRect(var15 - 3, var16 + var9 + 3, var15 + var5 + 3, var16 + var9 + 4, var10, var10);
  167.             this.drawGradientRect(var15 - 3, var16 - 3, var15 + var5 + 3, var16 + var9 + 3, var10, var10);
  168.             this.drawGradientRect(var15 - 4, var16 - 3, var15 - 3, var16 + var9 + 3, var10, var10);
  169.             this.drawGradientRect(var15 + var5 + 3, var16 - 3, var15 + var5 + 4, var16 + var9 + 3, var10, var10);
  170.             int var11 = 1347420415;
  171.             int var12 = (var11 & 16711422) >> 1 | var11 & -16777216;
  172.             this.drawGradientRect(var15 - 3, var16 - 3 + 1, var15 - 3 + 1, var16 + var9 + 3 - 1, var11, var12);
  173.             this.drawGradientRect(var15 + var5 + 2, var16 - 3 + 1, var15 + var5 + 3, var16 + var9 + 3 - 1, var11, var12);
  174.             this.drawGradientRect(var15 - 3, var16 - 3, var15 + var5 + 3, var16 - 3 + 1, var11, var11);
  175.             this.drawGradientRect(var15 - 3, var16 + var9 + 2, var15 + var5 + 3, var16 + var9 + 3, var12, var12);
  176.  
  177.             for (int var13 = 0; var13 < var4.size(); ++var13)
  178.             {
  179.                 String var14 = (String)var4.get(var13);
  180.  
  181.                 if (var13 == 0)
  182.                 {
  183.                     var14 = "\u00a7" + Integer.toHexString(par1ItemStack.getRarity().rarityColor) + var14;
  184.                 }
  185.                 else
  186.                 {
  187.                     var14 = "\u00a77" + var14;
  188.                 }
  189.  
  190.                 this.fontRenderer.drawStringWithShadow(var14, var15, var16, -1);
  191.  
  192.                 if (var13 == 0)
  193.                 {
  194.                     var16 += 2;
  195.                 }
  196.  
  197.                 var16 += 10;
  198.             }
  199.  
  200.             this.zLevel = 0.0F;
  201.             itemRenderer.zLevel = 0.0F;
  202.         }
  203.     }
  204.  
  205.     protected void func_74190_a(String par1Str, int par2, int par3)
  206.     {
  207.         GL11.glDisable(GL12.GL_RESCALE_NORMAL);
  208.         RenderHelper.disableStandardItemLighting();
  209.         GL11.glDisable(GL11.GL_LIGHTING);
  210.         GL11.glDisable(GL11.GL_DEPTH_TEST);
  211.         int var4 = this.fontRenderer.getStringWidth(par1Str);
  212.         int var5 = par2 + 12;
  213.         int var6 = par3 - 12;
  214.         byte var8 = 8;
  215.         this.zLevel = 300.0F;
  216.         itemRenderer.zLevel = 300.0F;
  217.         int var9 = -267386864;
  218.         this.drawGradientRect(var5 - 3, var6 - 4, var5 + var4 + 3, var6 - 3, var9, var9);
  219.         this.drawGradientRect(var5 - 3, var6 + var8 + 3, var5 + var4 + 3, var6 + var8 + 4, var9, var9);
  220.         this.drawGradientRect(var5 - 3, var6 - 3, var5 + var4 + 3, var6 + var8 + 3, var9, var9);
  221.         this.drawGradientRect(var5 - 4, var6 - 3, var5 - 3, var6 + var8 + 3, var9, var9);
  222.         this.drawGradientRect(var5 + var4 + 3, var6 - 3, var5 + var4 + 4, var6 + var8 + 3, var9, var9);
  223.         int var10 = 1347420415;
  224.         int var11 = (var10 & 16711422) >> 1 | var10 & -16777216;
  225.         this.drawGradientRect(var5 - 3, var6 - 3 + 1, var5 - 3 + 1, var6 + var8 + 3 - 1, var10, var11);
  226.         this.drawGradientRect(var5 + var4 + 2, var6 - 3 + 1, var5 + var4 + 3, var6 + var8 + 3 - 1, var10, var11);
  227.         this.drawGradientRect(var5 - 3, var6 - 3, var5 + var4 + 3, var6 - 3 + 1, var10, var10);
  228.         this.drawGradientRect(var5 - 3, var6 + var8 + 2, var5 + var4 + 3, var6 + var8 + 3, var11, var11);
  229.         this.fontRenderer.drawStringWithShadow(par1Str, var5, var6, -1);
  230.         this.zLevel = 0.0F;
  231.         itemRenderer.zLevel = 0.0F;
  232.     }
  233.  
  234.     /**
  235.      * Draw the foreground layer for the GuiContainer (everything in front of the items)
  236.      */
  237.     protected void drawGuiContainerForegroundLayer() {}
  238.  
  239.     /**
  240.      * Draw the background layer for the GuiContainer (everything behind the items)
  241.      */
  242.     protected abstract void drawGuiContainerBackgroundLayer(float var1, int var2, int var3);
  243.  
  244.     /**
  245.      * Draws an inventory slot
  246.      */
  247.     private void drawSlotInventory(Slot par1Slot)
  248.     {
  249.         int var2 = par1Slot.xDisplayPosition;
  250.         int var3 = par1Slot.yDisplayPosition;
  251.         ItemStack var4 = par1Slot.getStack();
  252.         boolean var5 = false;
  253.         this.zLevel = 100.0F;
  254.         itemRenderer.zLevel = 100.0F;
  255.  
  256.         if (var4 == null)
  257.         {
  258.             int var6 = par1Slot.getBackgroundIconIndex();
  259.  
  260.             if (var6 >= 0)
  261.             {
  262.                 GL11.glDisable(GL11.GL_LIGHTING);
  263.                 this.mc.renderEngine.bindTexture(this.mc.renderEngine.getTexture("/gui/items.png"));
  264.                 this.drawTexturedModalRect(var2, var3, var6 % 16 * 16, var6 / 16 * 16, 16, 16);
  265.                 GL11.glEnable(GL11.GL_LIGHTING);
  266.                 var5 = true;
  267.             }
  268.         }
  269.  
  270.         if (!var5)
  271.         {
  272.             GL11.glEnable(GL11.GL_DEPTH_TEST);
  273.             itemRenderer.renderItemIntoGUI(this.fontRenderer, this.mc.renderEngine, var4, var2, var3);
  274.             itemRenderer.renderItemOverlayIntoGUI(this.fontRenderer, this.mc.renderEngine, var4, var2, var3);
  275.         }
  276.  
  277.         itemRenderer.zLevel = 0.0F;
  278.         this.zLevel = 0.0F;
  279.     }
  280.  
  281.     /**
  282.      * Returns the slot at the given coordinates or null if there is none.
  283.      */
  284.     private Slot getSlotAtPosition(int par1, int par2)
  285.     {
  286.         for (int var3 = 0; var3 < this.inventorySlots.inventorySlots.size(); ++var3)
  287.         {
  288.             Slot var4 = (Slot)this.inventorySlots.inventorySlots.get(var3);
  289.  
  290.             if (this.isMouseOverSlot(var4, par1, par2))
  291.             {
  292.                 return var4;
  293.             }
  294.         }
  295.  
  296.         return null;
  297.     }
  298.  
  299.     /**
  300.      * Called when the mouse is clicked.
  301.      */
  302.     protected void mouseClicked(int par1, int par2, int par3)
  303.     {
  304.         super.mouseClicked(par1, par2, par3);
  305.  
  306.         if (par3 == 0 || par3 == 1)
  307.         {
  308.             Slot var4 = this.getSlotAtPosition(par1, par2);
  309.             int var5 = this.guiLeft;
  310.             int var6 = this.guiTop;
  311.             boolean var7 = par1 < var5 || par2 < var6 || par1 >= var5 + this.xSize || par2 >= var6 + this.ySize;
  312.             int var8 = -1;
  313.  
  314.             if (var4 != null)
  315.             {
  316.                 var8 = var4.slotNumber;
  317.             }
  318.  
  319.             if (var7)
  320.             {
  321.                 var8 = -999;
  322.             }
  323.  
  324.             if (var8 != -1)
  325.             {
  326.                 boolean var9 = var8 != -999 && (Keyboard.isKeyDown(42) || Keyboard.isKeyDown(54));
  327.                 this.handleMouseClick(var4, var8, par3, var9);
  328.             }
  329.         }
  330.     }
  331.  
  332.     /**
  333.      * Returns if the passed mouse position is over the specified slot.
  334.      */
  335.     private boolean isMouseOverSlot(Slot par1Slot, int par2, int par3)
  336.     {
  337.         return this.func_74188_c(par1Slot.xDisplayPosition, par1Slot.yDisplayPosition, 16, 16, par2, par3);
  338.     }
  339.  
  340.     protected boolean func_74188_c(int par1, int par2, int par3, int par4, int par5, int par6)
  341.     {
  342.         int var7 = this.guiLeft;
  343.         int var8 = this.guiTop;
  344.         par5 -= var7;
  345.         par6 -= var8;
  346.         return par5 >= par1 - 1 && par5 < par1 + par3 + 1 && par6 >= par2 - 1 && par6 < par2 + par4 + 1;
  347.     }
  348.  
  349.     protected void handleMouseClick(Slot par1Slot, int par2, int par3, boolean par4)
  350.     {
  351.         if (par1Slot != null)
  352.         {
  353.             par2 = par1Slot.slotNumber;
  354.         }
  355.  
  356.         this.mc.playerController.windowClick(this.inventorySlots.windowId, par2, par3, par4, this.mc.thePlayer);
  357.     }
  358.  
  359.     /**
  360.      * Fired when a key is typed. This is the equivalent of KeyListener.keyTyped(KeyEvent e).
  361.      */
  362.     protected void keyTyped(char par1, int par2)
  363.     {
  364.         if (par2 == 1 || par2 == this.mc.gameSettings.keyBindInventory.keyCode)
  365.         {
  366.             this.mc.thePlayer.closeScreen();
  367.         }
  368.     }
  369.  
  370.     /**
  371.      * Called when the screen is unloaded. Used to disable keyboard repeat events
  372.      */
  373.     public void onGuiClosed()
  374.     {
  375.         if (this.mc.thePlayer != null)
  376.         {
  377.             this.inventorySlots.onCraftGuiClosed(this.mc.thePlayer);
  378.         }
  379.     }
  380.  
  381.     /**
  382.      * Returns true if this GUI should pause the game when it is displayed in single-player
  383.      */
  384.     public boolean doesGuiPauseGame()
  385.     {
  386.         return false;
  387.     }
  388.  
  389.     /**
  390.      * Called from the main game loop to update the screen.
  391.      */
  392.     public void updateScreen()
  393.     {
  394.         super.updateScreen();
  395.  
  396.         if (!this.mc.thePlayer.isEntityAlive() || this.mc.thePlayer.isDead)
  397.         {
  398.             this.mc.thePlayer.closeScreen();
  399.         }
  400.     }
  401. }
Advertisement
Add Comment
Please, Sign In to add comment