package net.minecraft.client.gui; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.Tessellator; import org.lwjgl.input.Mouse; import org.lwjgl.opengl.GL11; @SideOnly(Side.CLIENT) public abstract class GuiScreenSelectLocation { private final Minecraft field_104092_f; private int field_104093_g; private int field_104105_h; protected int field_104098_a; protected int field_104096_b; private int field_104106_i; private int field_104103_j; protected final int field_104097_c; private int field_104104_k; private int field_104101_l; protected int field_104094_d; protected int field_104095_e; private float field_104102_m = -2.0F; private float field_104099_n; private float field_104100_o; private int field_104111_p = -1; private long field_104110_q = 0L; private boolean field_104109_r = true; private boolean field_104108_s; private int field_104107_t; public GuiScreenSelectLocation(Minecraft par1Minecraft, int par2, int par3, int par4, int par5, int par6) { this.field_104092_f = par1Minecraft; this.field_104093_g = par2; this.field_104105_h = par3; this.field_104098_a = par4; this.field_104096_b = par5; this.field_104097_c = par6; this.field_104103_j = 0; this.field_104106_i = par2; } public void func_104084_a(int par1, int par2, int par3, int par4) { this.field_104093_g = par1; this.field_104105_h = par2; this.field_104098_a = par3; this.field_104096_b = par4; this.field_104103_j = 0; this.field_104106_i = par1; } /** * Gets the size of the current slot list. */ protected abstract int getSize(); /** * the element in the slot that was clicked, boolean for wether it was double clicked or not */ protected abstract void elementClicked(int i, boolean flag); /** * returns true if the element passed in is currently selected */ protected abstract boolean isSelected(int i); protected abstract boolean func_104086_b(int i); /** * return the height of the content being scrolled */ protected int getContentHeight() { return this.getSize() * this.field_104097_c + this.field_104107_t; } protected abstract void drawBackground(); protected abstract void drawSlot(int i, int j, int k, int l, Tessellator tessellator); protected void func_104088_a(int par1, int par2, Tessellator par3Tessellator) {} protected void func_104089_a(int par1, int par2) {} protected void func_104087_b(int par1, int par2) {} private void func_104091_h() { int i = this.func_104085_d(); if (i < 0) { i /= 2; } if (this.field_104100_o < 0.0F) { this.field_104100_o = 0.0F; } if (this.field_104100_o > (float)i) { this.field_104100_o = (float)i; } } public int func_104085_d() { return this.getContentHeight() - (this.field_104096_b - this.field_104098_a - 4); } /** * Fired when a control is clicked. This is the equivalent of ActionListener.actionPerformed(ActionEvent e). */ public void actionPerformed(GuiButton par1GuiButton) { if (par1GuiButton.enabled) { if (par1GuiButton.id == this.field_104104_k) { this.field_104100_o -= (float)(this.field_104097_c * 2 / 3); this.field_104102_m = -2.0F; this.func_104091_h(); } else if (par1GuiButton.id == this.field_104101_l) { this.field_104100_o += (float)(this.field_104097_c * 2 / 3); this.field_104102_m = -2.0F; this.func_104091_h(); } } } /** * Draws the screen and all the components in it. */ public void drawScreen(int par1, int par2, float par3) { this.field_104094_d = par1; this.field_104095_e = par2; this.drawBackground(); int k = this.getSize(); int l = this.func_104090_g(); int i1 = l + 6; int j1; int k1; int l1; int i2; int j2; if (Mouse.isButtonDown(0)) { if (this.field_104102_m == -1.0F) { boolean flag = true; if (par2 >= this.field_104098_a && par2 <= this.field_104096_b) { int k2 = this.field_104093_g / 2 - 110; j1 = this.field_104093_g / 2 + 110; k1 = par2 - this.field_104098_a - this.field_104107_t + (int)this.field_104100_o - 4; l1 = k1 / this.field_104097_c; if (par1 >= k2 && par1 <= j1 && l1 >= 0 && k1 >= 0 && l1 < k) { boolean flag1 = l1 == this.field_104111_p && Minecraft.getSystemTime() - this.field_104110_q < 250L; this.elementClicked(l1, flag1); this.field_104111_p = l1; this.field_104110_q = Minecraft.getSystemTime(); } else if (par1 >= k2 && par1 <= j1 && k1 < 0) { this.func_104089_a(par1 - k2, par2 - this.field_104098_a + (int)this.field_104100_o - 4); flag = false; } if (par1 >= l && par1 <= i1) { this.field_104099_n = -1.0F; j2 = this.func_104085_d(); if (j2 < 1) { j2 = 1; } i2 = (int)((float)((this.field_104096_b - this.field_104098_a) * (this.field_104096_b - this.field_104098_a)) / (float)this.getContentHeight()); if (i2 < 32) { i2 = 32; } if (i2 > this.field_104096_b - this.field_104098_a - 8) { i2 = this.field_104096_b - this.field_104098_a - 8; } this.field_104099_n /= (float)(this.field_104096_b - this.field_104098_a - i2) / (float)j2; } else { this.field_104099_n = 1.0F; } if (flag) { this.field_104102_m = (float)par2; } else { this.field_104102_m = -2.0F; } } else { this.field_104102_m = -2.0F; } } else if (this.field_104102_m >= 0.0F) { this.field_104100_o -= ((float)par2 - this.field_104102_m) * this.field_104099_n; this.field_104102_m = (float)par2; } } else { while (!this.field_104092_f.gameSettings.touchscreen && Mouse.next()) { int l2 = Mouse.getEventDWheel(); if (l2 != 0) { if (l2 > 0) { l2 = -1; } else if (l2 < 0) { l2 = 1; } this.field_104100_o += (float)(l2 * this.field_104097_c / 2); } } this.field_104102_m = -1.0F; } this.func_104091_h(); GL11.glDisable(GL11.GL_LIGHTING); GL11.glDisable(GL11.GL_FOG); Tessellator tessellator = Tessellator.instance; this.field_104092_f.renderEngine.bindTexture("/gui/background.png"); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); float f1 = 32.0F; tessellator.startDrawingQuads(); tessellator.setColorOpaque_I(2105376); tessellator.addVertexWithUV((double)this.field_104103_j, (double)this.field_104096_b, 0.0D, (double)((float)this.field_104103_j / f1), (double)((float)(this.field_104096_b + (int)this.field_104100_o) / f1)); tessellator.addVertexWithUV((double)this.field_104106_i, (double)this.field_104096_b, 0.0D, (double)((float)this.field_104106_i / f1), (double)((float)(this.field_104096_b + (int)this.field_104100_o) / f1)); tessellator.addVertexWithUV((double)this.field_104106_i, (double)this.field_104098_a, 0.0D, (double)((float)this.field_104106_i / f1), (double)((float)(this.field_104098_a + (int)this.field_104100_o) / f1)); tessellator.addVertexWithUV((double)this.field_104103_j, (double)this.field_104098_a, 0.0D, (double)((float)this.field_104103_j / f1), (double)((float)(this.field_104098_a + (int)this.field_104100_o) / f1)); tessellator.draw(); j1 = this.field_104093_g / 2 - 92 - 16; k1 = this.field_104098_a + 4 - (int)this.field_104100_o; if (this.field_104108_s) { this.func_104088_a(j1, k1, tessellator); } int i3; for (l1 = 0; l1 < k; ++l1) { j2 = k1 + l1 * this.field_104097_c + this.field_104107_t; i2 = this.field_104097_c - 4; if (j2 <= this.field_104096_b && j2 + i2 >= this.field_104098_a) { int j3; if (this.field_104109_r && this.func_104086_b(l1)) { i3 = this.field_104093_g / 2 - 110; j3 = this.field_104093_g / 2 + 110; GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); GL11.glDisable(GL11.GL_TEXTURE_2D); tessellator.startDrawingQuads(); tessellator.setColorOpaque_I(0); tessellator.addVertexWithUV((double)i3, (double)(j2 + i2 + 2), 0.0D, 0.0D, 1.0D); tessellator.addVertexWithUV((double)j3, (double)(j2 + i2 + 2), 0.0D, 1.0D, 1.0D); tessellator.addVertexWithUV((double)j3, (double)(j2 - 2), 0.0D, 1.0D, 0.0D); tessellator.addVertexWithUV((double)i3, (double)(j2 - 2), 0.0D, 0.0D, 0.0D); tessellator.draw(); GL11.glEnable(GL11.GL_TEXTURE_2D); } if (this.field_104109_r && this.isSelected(l1)) { i3 = this.field_104093_g / 2 - 110; j3 = this.field_104093_g / 2 + 110; GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); GL11.glDisable(GL11.GL_TEXTURE_2D); tessellator.startDrawingQuads(); tessellator.setColorOpaque_I(8421504); tessellator.addVertexWithUV((double)i3, (double)(j2 + i2 + 2), 0.0D, 0.0D, 1.0D); tessellator.addVertexWithUV((double)j3, (double)(j2 + i2 + 2), 0.0D, 1.0D, 1.0D); tessellator.addVertexWithUV((double)j3, (double)(j2 - 2), 0.0D, 1.0D, 0.0D); tessellator.addVertexWithUV((double)i3, (double)(j2 - 2), 0.0D, 0.0D, 0.0D); tessellator.setColorOpaque_I(0); tessellator.addVertexWithUV((double)(i3 + 1), (double)(j2 + i2 + 1), 0.0D, 0.0D, 1.0D); tessellator.addVertexWithUV((double)(j3 - 1), (double)(j2 + i2 + 1), 0.0D, 1.0D, 1.0D); tessellator.addVertexWithUV((double)(j3 - 1), (double)(j2 - 1), 0.0D, 1.0D, 0.0D); tessellator.addVertexWithUV((double)(i3 + 1), (double)(j2 - 1), 0.0D, 0.0D, 0.0D); tessellator.draw(); GL11.glEnable(GL11.GL_TEXTURE_2D); } this.drawSlot(l1, j1, j2, i2, tessellator); } } GL11.glDisable(GL11.GL_DEPTH_TEST); byte b0 = 4; this.func_104083_b(0, this.field_104098_a, 255, 255); this.func_104083_b(this.field_104096_b, this.field_104105_h, 255, 255); GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); GL11.glDisable(GL11.GL_ALPHA_TEST); GL11.glShadeModel(GL11.GL_SMOOTH); GL11.glDisable(GL11.GL_TEXTURE_2D); tessellator.startDrawingQuads(); tessellator.setColorRGBA_I(0, 0); tessellator.addVertexWithUV((double)this.field_104103_j, (double)(this.field_104098_a + b0), 0.0D, 0.0D, 1.0D); tessellator.addVertexWithUV((double)this.field_104106_i, (double)(this.field_104098_a + b0), 0.0D, 1.0D, 1.0D); tessellator.setColorRGBA_I(0, 255); tessellator.addVertexWithUV((double)this.field_104106_i, (double)this.field_104098_a, 0.0D, 1.0D, 0.0D); tessellator.addVertexWithUV((double)this.field_104103_j, (double)this.field_104098_a, 0.0D, 0.0D, 0.0D); tessellator.draw(); tessellator.startDrawingQuads(); tessellator.setColorRGBA_I(0, 255); tessellator.addVertexWithUV((double)this.field_104103_j, (double)this.field_104096_b, 0.0D, 0.0D, 1.0D); tessellator.addVertexWithUV((double)this.field_104106_i, (double)this.field_104096_b, 0.0D, 1.0D, 1.0D); tessellator.setColorRGBA_I(0, 0); tessellator.addVertexWithUV((double)this.field_104106_i, (double)(this.field_104096_b - b0), 0.0D, 1.0D, 0.0D); tessellator.addVertexWithUV((double)this.field_104103_j, (double)(this.field_104096_b - b0), 0.0D, 0.0D, 0.0D); tessellator.draw(); j2 = this.func_104085_d(); if (j2 > 0) { i2 = (this.field_104096_b - this.field_104098_a) * (this.field_104096_b - this.field_104098_a) / this.getContentHeight(); if (i2 < 32) { i2 = 32; } if (i2 > this.field_104096_b - this.field_104098_a - 8) { i2 = this.field_104096_b - this.field_104098_a - 8; } i3 = (int)this.field_104100_o * (this.field_104096_b - this.field_104098_a - i2) / j2 + this.field_104098_a; if (i3 < this.field_104098_a) { i3 = this.field_104098_a; } tessellator.startDrawingQuads(); tessellator.setColorRGBA_I(0, 255); tessellator.addVertexWithUV((double)l, (double)this.field_104096_b, 0.0D, 0.0D, 1.0D); tessellator.addVertexWithUV((double)i1, (double)this.field_104096_b, 0.0D, 1.0D, 1.0D); tessellator.addVertexWithUV((double)i1, (double)this.field_104098_a, 0.0D, 1.0D, 0.0D); tessellator.addVertexWithUV((double)l, (double)this.field_104098_a, 0.0D, 0.0D, 0.0D); tessellator.draw(); tessellator.startDrawingQuads(); tessellator.setColorRGBA_I(8421504, 255); tessellator.addVertexWithUV((double)l, (double)(i3 + i2), 0.0D, 0.0D, 1.0D); tessellator.addVertexWithUV((double)i1, (double)(i3 + i2), 0.0D, 1.0D, 1.0D); tessellator.addVertexWithUV((double)i1, (double)i3, 0.0D, 1.0D, 0.0D); tessellator.addVertexWithUV((double)l, (double)i3, 0.0D, 0.0D, 0.0D); tessellator.draw(); tessellator.startDrawingQuads(); tessellator.setColorRGBA_I(12632256, 255); tessellator.addVertexWithUV((double)l, (double)(i3 + i2 - 1), 0.0D, 0.0D, 1.0D); tessellator.addVertexWithUV((double)(i1 - 1), (double)(i3 + i2 - 1), 0.0D, 1.0D, 1.0D); tessellator.addVertexWithUV((double)(i1 - 1), (double)i3, 0.0D, 1.0D, 0.0D); tessellator.addVertexWithUV((double)l, (double)i3, 0.0D, 0.0D, 0.0D); tessellator.draw(); } this.func_104087_b(par1, par2); GL11.glEnable(GL11.GL_TEXTURE_2D); GL11.glShadeModel(GL11.GL_FLAT); GL11.glEnable(GL11.GL_ALPHA_TEST); GL11.glDisable(GL11.GL_BLEND); } protected int func_104090_g() { return this.field_104093_g / 2 + 124; } private void func_104083_b(int par1, int par2, int par3, int par4) { Tessellator tessellator = Tessellator.instance; this.field_104092_f.renderEngine.bindTexture("/gui/background.png"); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); float f = 32.0F; tessellator.startDrawingQuads(); tessellator.setColorRGBA_I(4210752, par4); tessellator.addVertexWithUV(0.0D, (double)par2, 0.0D, 0.0D, (double)((float)par2 / f)); tessellator.addVertexWithUV((double)this.field_104093_g, (double)par2, 0.0D, (double)((float)this.field_104093_g / f), (double)((float)par2 / f)); tessellator.setColorRGBA_I(4210752, par3); tessellator.addVertexWithUV((double)this.field_104093_g, (double)par1, 0.0D, (double)((float)this.field_104093_g / f), (double)((float)par1 / f)); tessellator.addVertexWithUV(0.0D, (double)par1, 0.0D, 0.0D, (double)((float)par1 / f)); tessellator.draw(); } }