001package net.minecraft.client.gui; 002 003import cpw.mods.fml.relauncher.Side; 004import cpw.mods.fml.relauncher.SideOnly; 005import net.minecraft.client.Minecraft; 006import net.minecraft.client.renderer.Tessellator; 007import org.lwjgl.input.Mouse; 008import org.lwjgl.opengl.GL11; 009 010@SideOnly(Side.CLIENT) 011public abstract class SelectionListBase 012{ 013 private final Minecraft field_96622_a; 014 private final int field_96619_e; 015 private final int field_96616_f; 016 private final int field_96617_g; 017 private final int field_96627_h; 018 protected final int field_96620_b; 019 protected int field_96621_c; 020 protected int field_96618_d; 021 private float field_96628_i = -2.0F; 022 private float field_96625_j; 023 private float field_96626_k; 024 private int field_96623_l = -1; 025 private long field_96624_m = 0L; 026 027 public SelectionListBase(Minecraft par1Minecraft, int par2, int par3, int par4, int par5, int par6) 028 { 029 this.field_96622_a = par1Minecraft; 030 this.field_96616_f = par3; 031 this.field_96627_h = par3 + par5; 032 this.field_96620_b = par6; 033 this.field_96619_e = par2; 034 this.field_96617_g = par2 + par4; 035 } 036 037 protected abstract int func_96608_a(); 038 039 protected abstract void func_96615_a(int i, boolean flag); 040 041 protected abstract boolean func_96609_a(int i); 042 043 protected int func_96613_b() 044 { 045 return this.func_96608_a() * this.field_96620_b; 046 } 047 048 protected abstract void func_96611_c(); 049 050 protected abstract void func_96610_a(int i, int j, int k, int l, Tessellator tessellator); 051 052 private void func_96614_f() 053 { 054 int i = this.func_96607_d(); 055 056 if (i < 0) 057 { 058 i = 0; 059 } 060 061 if (this.field_96626_k < 0.0F) 062 { 063 this.field_96626_k = 0.0F; 064 } 065 066 if (this.field_96626_k > (float)i) 067 { 068 this.field_96626_k = (float)i; 069 } 070 } 071 072 public int func_96607_d() 073 { 074 return this.func_96613_b() - (this.field_96627_h - this.field_96616_f - 4); 075 } 076 077 public void func_96612_a(int par1, int par2, float par3) 078 { 079 this.field_96621_c = par1; 080 this.field_96618_d = par2; 081 this.func_96611_c(); 082 int k = this.func_96608_a(); 083 int l = this.func_96606_e(); 084 int i1 = l + 6; 085 int j1; 086 int k1; 087 int l1; 088 int i2; 089 int j2; 090 091 if (Mouse.isButtonDown(0)) 092 { 093 if (this.field_96628_i == -1.0F) 094 { 095 boolean flag = true; 096 097 if (par2 >= this.field_96616_f && par2 <= this.field_96627_h) 098 { 099 int k2 = this.field_96619_e + 2; 100 j1 = this.field_96617_g - 2; 101 k1 = par2 - this.field_96616_f + (int)this.field_96626_k - 4; 102 l1 = k1 / this.field_96620_b; 103 104 if (par1 >= k2 && par1 <= j1 && l1 >= 0 && k1 >= 0 && l1 < k) 105 { 106 boolean flag1 = l1 == this.field_96623_l && Minecraft.getSystemTime() - this.field_96624_m < 250L; 107 this.func_96615_a(l1, flag1); 108 this.field_96623_l = l1; 109 this.field_96624_m = Minecraft.getSystemTime(); 110 } 111 else if (par1 >= k2 && par1 <= j1 && k1 < 0) 112 { 113 flag = false; 114 } 115 116 if (par1 >= l && par1 <= i1) 117 { 118 this.field_96625_j = -1.0F; 119 j2 = this.func_96607_d(); 120 121 if (j2 < 1) 122 { 123 j2 = 1; 124 } 125 126 i2 = (int)((float)((this.field_96627_h - this.field_96616_f) * (this.field_96627_h - this.field_96616_f)) / (float)this.func_96613_b()); 127 128 if (i2 < 32) 129 { 130 i2 = 32; 131 } 132 133 if (i2 > this.field_96627_h - this.field_96616_f - 8) 134 { 135 i2 = this.field_96627_h - this.field_96616_f - 8; 136 } 137 138 this.field_96625_j /= (float)(this.field_96627_h - this.field_96616_f - i2) / (float)j2; 139 } 140 else 141 { 142 this.field_96625_j = 1.0F; 143 } 144 145 if (flag) 146 { 147 this.field_96628_i = (float)par2; 148 } 149 else 150 { 151 this.field_96628_i = -2.0F; 152 } 153 } 154 else 155 { 156 this.field_96628_i = -2.0F; 157 } 158 } 159 else if (this.field_96628_i >= 0.0F) 160 { 161 this.field_96626_k -= ((float)par2 - this.field_96628_i) * this.field_96625_j; 162 this.field_96628_i = (float)par2; 163 } 164 } 165 else 166 { 167 while (!this.field_96622_a.gameSettings.touchscreen && Mouse.next()) 168 { 169 int l2 = Mouse.getEventDWheel(); 170 171 if (l2 != 0) 172 { 173 if (l2 > 0) 174 { 175 l2 = -1; 176 } 177 else if (l2 < 0) 178 { 179 l2 = 1; 180 } 181 182 this.field_96626_k += (float)(l2 * this.field_96620_b / 2); 183 } 184 } 185 186 this.field_96628_i = -1.0F; 187 } 188 189 this.func_96614_f(); 190 GL11.glDisable(GL11.GL_LIGHTING); 191 GL11.glDisable(GL11.GL_FOG); 192 Tessellator tessellator = Tessellator.instance; 193 this.field_96622_a.renderEngine.bindTexture("/gui/background.png"); 194 GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); 195 float f1 = 32.0F; 196 tessellator.startDrawingQuads(); 197 tessellator.setColorOpaque_I(2105376); 198 tessellator.addVertexWithUV((double)this.field_96619_e, (double)this.field_96627_h, 0.0D, (double)((float)this.field_96619_e / f1), (double)((float)(this.field_96627_h + (int)this.field_96626_k) / f1)); 199 tessellator.addVertexWithUV((double)this.field_96617_g, (double)this.field_96627_h, 0.0D, (double)((float)this.field_96617_g / f1), (double)((float)(this.field_96627_h + (int)this.field_96626_k) / f1)); 200 tessellator.addVertexWithUV((double)this.field_96617_g, (double)this.field_96616_f, 0.0D, (double)((float)this.field_96617_g / f1), (double)((float)(this.field_96616_f + (int)this.field_96626_k) / f1)); 201 tessellator.addVertexWithUV((double)this.field_96619_e, (double)this.field_96616_f, 0.0D, (double)((float)this.field_96619_e / f1), (double)((float)(this.field_96616_f + (int)this.field_96626_k) / f1)); 202 tessellator.draw(); 203 j1 = this.field_96619_e + 2; 204 k1 = this.field_96616_f + 4 - (int)this.field_96626_k; 205 int i3; 206 207 for (l1 = 0; l1 < k; ++l1) 208 { 209 j2 = k1 + l1 * this.field_96620_b; 210 i2 = this.field_96620_b - 4; 211 212 if (j2 + this.field_96620_b <= this.field_96627_h && j2 - 4 >= this.field_96616_f) 213 { 214 if (this.func_96609_a(l1)) 215 { 216 i3 = this.field_96619_e + 2; 217 int j3 = this.field_96617_g - 2; 218 GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); 219 GL11.glDisable(GL11.GL_TEXTURE_2D); 220 tessellator.startDrawingQuads(); 221 tessellator.setColorOpaque_I(8421504); 222 tessellator.addVertexWithUV((double)i3, (double)(j2 + i2 + 2), 0.0D, 0.0D, 1.0D); 223 tessellator.addVertexWithUV((double)j3, (double)(j2 + i2 + 2), 0.0D, 1.0D, 1.0D); 224 tessellator.addVertexWithUV((double)j3, (double)(j2 - 2), 0.0D, 1.0D, 0.0D); 225 tessellator.addVertexWithUV((double)i3, (double)(j2 - 2), 0.0D, 0.0D, 0.0D); 226 tessellator.setColorOpaque_I(0); 227 tessellator.addVertexWithUV((double)(i3 + 1), (double)(j2 + i2 + 1), 0.0D, 0.0D, 1.0D); 228 tessellator.addVertexWithUV((double)(j3 - 1), (double)(j2 + i2 + 1), 0.0D, 1.0D, 1.0D); 229 tessellator.addVertexWithUV((double)(j3 - 1), (double)(j2 - 1), 0.0D, 1.0D, 0.0D); 230 tessellator.addVertexWithUV((double)(i3 + 1), (double)(j2 - 1), 0.0D, 0.0D, 0.0D); 231 tessellator.draw(); 232 GL11.glEnable(GL11.GL_TEXTURE_2D); 233 } 234 235 this.func_96610_a(l1, j1, j2, i2, tessellator); 236 } 237 } 238 239 GL11.glDisable(GL11.GL_DEPTH_TEST); 240 byte b0 = 4; 241 GL11.glEnable(GL11.GL_BLEND); 242 GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); 243 GL11.glDisable(GL11.GL_ALPHA_TEST); 244 GL11.glShadeModel(GL11.GL_SMOOTH); 245 GL11.glDisable(GL11.GL_TEXTURE_2D); 246 tessellator.startDrawingQuads(); 247 tessellator.setColorRGBA_I(0, 0); 248 tessellator.addVertexWithUV((double)this.field_96619_e, (double)(this.field_96616_f + b0), 0.0D, 0.0D, 1.0D); 249 tessellator.addVertexWithUV((double)this.field_96617_g, (double)(this.field_96616_f + b0), 0.0D, 1.0D, 1.0D); 250 tessellator.setColorRGBA_I(0, 255); 251 tessellator.addVertexWithUV((double)this.field_96617_g, (double)this.field_96616_f, 0.0D, 1.0D, 0.0D); 252 tessellator.addVertexWithUV((double)this.field_96619_e, (double)this.field_96616_f, 0.0D, 0.0D, 0.0D); 253 tessellator.draw(); 254 tessellator.startDrawingQuads(); 255 tessellator.setColorRGBA_I(0, 255); 256 tessellator.addVertexWithUV((double)this.field_96619_e, (double)this.field_96627_h, 0.0D, 0.0D, 1.0D); 257 tessellator.addVertexWithUV((double)this.field_96617_g, (double)this.field_96627_h, 0.0D, 1.0D, 1.0D); 258 tessellator.setColorRGBA_I(0, 0); 259 tessellator.addVertexWithUV((double)this.field_96617_g, (double)(this.field_96627_h - b0), 0.0D, 1.0D, 0.0D); 260 tessellator.addVertexWithUV((double)this.field_96619_e, (double)(this.field_96627_h - b0), 0.0D, 0.0D, 0.0D); 261 tessellator.draw(); 262 j2 = this.func_96607_d(); 263 264 if (j2 > 0) 265 { 266 i2 = (this.field_96627_h - this.field_96616_f) * (this.field_96627_h - this.field_96616_f) / this.func_96613_b(); 267 268 if (i2 < 32) 269 { 270 i2 = 32; 271 } 272 273 if (i2 > this.field_96627_h - this.field_96616_f - 8) 274 { 275 i2 = this.field_96627_h - this.field_96616_f - 8; 276 } 277 278 i3 = (int)this.field_96626_k * (this.field_96627_h - this.field_96616_f - i2) / j2 + this.field_96616_f; 279 280 if (i3 < this.field_96616_f) 281 { 282 i3 = this.field_96616_f; 283 } 284 285 tessellator.startDrawingQuads(); 286 tessellator.setColorRGBA_I(0, 255); 287 tessellator.addVertexWithUV((double)l, (double)this.field_96627_h, 0.0D, 0.0D, 1.0D); 288 tessellator.addVertexWithUV((double)i1, (double)this.field_96627_h, 0.0D, 1.0D, 1.0D); 289 tessellator.addVertexWithUV((double)i1, (double)this.field_96616_f, 0.0D, 1.0D, 0.0D); 290 tessellator.addVertexWithUV((double)l, (double)this.field_96616_f, 0.0D, 0.0D, 0.0D); 291 tessellator.draw(); 292 tessellator.startDrawingQuads(); 293 tessellator.setColorRGBA_I(8421504, 255); 294 tessellator.addVertexWithUV((double)l, (double)(i3 + i2), 0.0D, 0.0D, 1.0D); 295 tessellator.addVertexWithUV((double)i1, (double)(i3 + i2), 0.0D, 1.0D, 1.0D); 296 tessellator.addVertexWithUV((double)i1, (double)i3, 0.0D, 1.0D, 0.0D); 297 tessellator.addVertexWithUV((double)l, (double)i3, 0.0D, 0.0D, 0.0D); 298 tessellator.draw(); 299 tessellator.startDrawingQuads(); 300 tessellator.setColorRGBA_I(12632256, 255); 301 tessellator.addVertexWithUV((double)l, (double)(i3 + i2 - 1), 0.0D, 0.0D, 1.0D); 302 tessellator.addVertexWithUV((double)(i1 - 1), (double)(i3 + i2 - 1), 0.0D, 1.0D, 1.0D); 303 tessellator.addVertexWithUV((double)(i1 - 1), (double)i3, 0.0D, 1.0D, 0.0D); 304 tessellator.addVertexWithUV((double)l, (double)i3, 0.0D, 0.0D, 0.0D); 305 tessellator.draw(); 306 } 307 308 GL11.glEnable(GL11.GL_TEXTURE_2D); 309 GL11.glShadeModel(GL11.GL_FLAT); 310 GL11.glEnable(GL11.GL_ALPHA_TEST); 311 GL11.glDisable(GL11.GL_BLEND); 312 } 313 314 protected int func_96606_e() 315 { 316 return this.field_96617_g - 8; 317 } 318}